only_full_group_by =on fortæller MySQL-motoren:Anvend ikke GROUP BY når du er i tvivl om, hvilke resultater du skal vise og smider en fejl. Kun anvende det, hvis Group By fortæller dig specifikt, hvad du skal gøre. når Group By er fuld og perfekt!
only_full_group_by =off fortæller MySQL-motoren:Anvend altid GROUP BY og hvis du er i tvivl om, hvilke resultater du skal vælge, skal du blot vælge et tilfældigt!
Du behøver ikke at slå det fra, hvis du bruger GROUP BY ordentligt!
Eksempel:
Tabel:brugere
id | name
----------------
1 ali
2 john
3 ali
Når du bruger GROUP BY på name kolonne:
SELECT * FROM users GROUP BY name;
Der er to mulige resultater:
1 ali
2 john
ELLER
2 john
3 ali
MYSQL ved ikke, hvilket resultat jeg skal vælge! Fordi der er forskellige id s, men begge har name=ali .
Løsning 1:
kun ved at vælge name felt:
SELECT name FROM users GROUP BY name;
resultat:
ali
john
Dette er en perfekt løsning. fjernelse af kolonner, der gør GROUP BY forvirret. Det betyder, at du ved, hvad du laver. Normalt har du ikke brug for
disse kolonner, men hvis du har brug for dem, skal du gå til Løsning3 !
Løsning 2:
Deaktiverer only_full_group_by . MYSQL vil vælge et af de to mulige resultater tilfældigt !! (Det er ok, hvis du er ligeglad med hvilket id den vil vælge, men husk at slå den til umiddelbart efter din forespørgsel for at forhindre uventet adfærd i fremtidige groupBys)
Løsning 3
Brug en Aggregate funktion som MIN() , MAX() for at hjælpe MYSQL med at beslutte, hvad det skal vælge.
For eksempel:
SELECT MAX(id), name FROM users GROUP BY name;
resultat:
2 john
3 ali
Det vil vælge ali række, som har det maksimale id .