only_full_group_by =sur indique au moteur MySQL :Ne pas appliquer GROUP BY
lorsque vous avez des doutes sur les résultats à afficher et que vous lancez une erreur. Seulement appliquez-le si Group By
vous dit spécifiquement quoi faire. c'est-à-dire lorsque le Group By
est complet et parfait !
only_full_group_by =désactivé indique au moteur MySQL :toujours appliquer GROUP BY
et si vous avez des doutes sur les résultats à choisir, choisissez-en un au hasard !
Vous n'êtes pas obligé de le désactiver si vous utilisez GROUP BY
correctement !
Exemple :
Tableau :utilisateurs
id | name
----------------
1 ali
2 john
3 ali
Lorsque vous utilisez GROUP BY
sur le name
colonne :
SELECT * FROM users GROUP BY name;
Il y a deux résultats possibles :
1 ali
2 john
OU
2 john
3 ali
MYSQL ne sait pas quel résultat choisir ! Parce qu'il y a différents id
s mais les deux ont name=ali
.
Solution 1 :
sélectionner uniquement le name
champ :
SELECT name FROM users GROUP BY name;
résultat :
ali
john
C'est une solution parfaite. supprimer les colonnes qui font GROUP BY
confus. Cela signifie que vous savez ce que vous faites. Généralement, vous n'avez pas besoin de
ces colonnes, mais si vous en avez besoin, passez à la Solution3 !
Solution 2 :
Désactiver only_full_group_by
. MYSQL choisira l'un des deux résultats possibles ALEATOIRE !! (Ce n'est pas grave si vous ne vous souciez pas vraiment de l'id
il choisira, mais n'oubliez pas de l'activer immédiatement après votre requête pour éviter les comportements inattendus dans les futurs groupBys)
Solution3
Utiliser un Aggregate
fonction comme MIN()
, MAX()
pour aider MYSQL à décider ce qu'il doit choisir.
Par exemple :
SELECT MAX(id), name FROM users GROUP BY name;
résultat :
2 john
3 ali
Il choisira le ali
ligne qui a le maximum id
.