MySQL: n'est pas dans GROUP BY
Le site produit des résultats, mais avec une sélection de COMTE et de la requête de sélection avec le GROUPE PAR deux résultat compte. Cela est probablement dû à l'erreur qui est de l'afficher dans phpmyadmin, mais pas sur le site.
Les Requêtes:
SELECT count(DISTINCT `name`) as `numrows` FROM `users` WHERE `verified` = '1'
SELECT `name`, `type`, `language`, `code` FROM `users` WHERE `verified` = '1' GROUP BY `name` ORDER BY `count` DESC LIMIT 0, 25
PhpMyAdmin fournit le message d'erreur suivant:
1055 - 'principale.les utilisateurs.type " n'est pas dans le GROUPE PAR
Lors de la lecture de MySQL docs, je suis pas encore clair ce que c'est que je dois corriger. Je n'arrive pas à saisir cette.
source d'informationauteur James Cordeiro
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'avoir un groupe complet par:
SQL92 exige que toutes les colonnes (à l'exception des agrégats) dans la clause select est la partie de la clause group by. SQL99 desserre cette restriction un peu et déclare que toutes les colonnes de la clause select doit être fonctionnellement dépendant de la clause group by. MySQL par défaut permet partielle du groupe par et cela peut produire des non-déterministe des réponses, par exemple:
I. e. un hasard y est de sélectionner pour le groupe x. On peut éviter ce problème en définissant @@sql_mode:
La meilleure solution à ce problème est, bien sûr, à l'aide d'une complète
GROUP BY
expression.Mais il y a une autre solution qui fonctionne autour de la
ONLY_FULL_GROUP_BY
blocage de l'ancienne extension MySQL pourGROUP BY
.ANY_VALUE()
déclare explicitement que ce qui est implicite dans MySQL incomplète deGROUP BY
des opérations, que le serveur peut choisir, bien, tout, la valeur de retour.Une autre solution mentionné plusieurs fois ci-dessus est de désactiver ce gênant 'ONLY_FULL_GROUP_BY' par exemple, comme dans ce post:
Désactiver ONLY_FULL_GROUP_BY
Je pense que cette solution est très utile si vous ne voulez pas de revoir l'ensemble du projet pour plusieurs heures. Et si vous ne vous souciez pas de l'imprévisible valeurs des colonnes qui ne sont pas de liste de la GROUPE PAR.
Il suffit de désactiver la rigueur de la requête.