only_full_group_by =su dice al motore MySQL:non applicare GROUP BY
quando hai dubbi su quali risultati mostrare e genera un errore. Solo applicalo se Group By
ti dice specificamente cosa fare. cioè quando il Group By
è pieno e perfetto!
only_full_group_by =disattivato dice al motore MySQL:applica sempre GROUP BY
e se hai dubbi su quali risultati scegliere, scegline uno a caso!
Non è necessario disattivarlo se utilizzi GROUP BY
correttamente!
Esempio:
Tabella:utenti
id | name
----------------
1 ali
2 john
3 ali
Quando usi GROUP BY
sul name
colonna:
SELECT * FROM users GROUP BY name;
Ci sono due possibili risultati:
1 ali
2 john
O
2 john
3 ali
MySQL non sa quale risultato scegliere! Perché ci sono diversi id
s ma entrambi hanno name=ali
.
Soluzione1:
selezionando solo il name
campo:
SELECT name FROM users GROUP BY name;
risultato:
ali
john
Questa è una soluzione perfetta. rimuovendo le colonne che rendono GROUP BY
confuso. Questo significa che sai cosa stai facendo. Di solito non hai bisogno di
quelle colonne, ma se ne hai bisogno, vai a Solution3 !
Soluzione2:
Disattivazione di only_full_group_by
. MYSQL sceglierà uno dei due possibili risultati RANDOMLY !! (Va bene se non ti interessa davvero quale id
sceglierà, ma ricorda di attivarlo subito dopo la tua richiesta per prevenire comportamenti imprevisti in future groupBy)
Soluzione3
Usa un Aggregate
funzione come MIN()
, MAX()
per aiutare MySQL a decidere cosa deve scegliere.
Ad esempio:
SELECT MAX(id), name FROM users GROUP BY name;
risultato:
2 john
3 ali
Sceglierà il ali
riga che ha il massimo id
.