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
.