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 .