only_full_group_by =zapnuto říká enginu MySQL:Neaplikujte GROUP BY
když máte pochybnosti o tom, jaké výsledky zobrazit, a vyvoláte chybu. Pouze použijte jej, pokud Group By
konkrétně vám řekne, co máte dělat. tj. když Group By
je plný a dokonalý!
only_full_group_by =vypnuto říká enginu MySQL:vždy použijte GROUP BY
a pokud máte pochybnosti o tom, jaké výsledky vybrat, vyberte jeden náhodně!
Pokud používáte GROUP BY
, nemusíte jej vypínat správně!
Příklad:
Tabulka:uživatelé
id | name
----------------
1 ali
2 john
3 ali
Když použijete GROUP BY
na name
sloupec:
SELECT * FROM users GROUP BY name;
Existují dva možné výsledky:
1 ali
2 john
NEBO
2 john
3 ali
MYSQL neví, jaký výsledek zvolit! Protože existují různé id
s, ale oba mají name=ali
.
Řešení 1:
pouze výběrem name
pole:
SELECT name FROM users GROUP BY name;
výsledek:
ali
john
To je perfektní řešení. odstranění sloupců, které tvoří GROUP BY
zmatený. To znamená, že víte, co děláte. Obvykle
tyto sloupce nepotřebujete, ale pokud je potřebujete, přejděte na Solution3 !
Řešení 2:
Vypínání only_full_group_by
. MYSQL vybere jeden ze dvou možných výsledků NÁHODNĚ !! (To je v pořádku, pokud vás opravdu nezajímá jaké id
vybere, ale nezapomeňte jej zapnout bezprostředně po dotazu, aby se předešlo neočekávanému chování v budoucích groupBys)
Řešení 3
Použijte Aggregate
funkce jako MIN()
, MAX()
pomoci MYSQL rozhodnout se, co si musí vybrat.
Například:
SELECT MAX(id), name FROM users GROUP BY name;
výsledek:
2 john
3 ali
Vybere ali
řádek, který má maximální id
.