only_full_group_by =wł. mówi silnikowi MySQL:nie stosuj GROUP BY
gdy masz wątpliwości, jakie wyniki pokazać i wyrzuć błąd. Tylko zastosuj, jeśli Group By
konkretnie mówi ci, co robić. np. gdy Group By
jest pełny i doskonały!
only_full_group_by =wyłączone mówi silnikowi MySQL:zawsze stosuj GROUP BY
a jeśli masz wątpliwości, jakie wyniki wybrać, po prostu wybierz jeden losowo!
Nie musisz go wyłączać, jeśli używasz GROUP BY
prawidłowo!
Przykład:
Tabela:użytkownicy
id | name
----------------
1 ali
2 john
3 ali
Kiedy używasz GROUP BY
na name
kolumna:
SELECT * FROM users GROUP BY name;
Możliwe są dwa wyniki:
1 ali
2 john
LUB
2 john
3 ali
MYSQL nie wie, jaki wynik wybrać! Ponieważ istnieją różne id
s, ale oba mają name=ali
.
Rozwiązanie 1:
tylko wybranie name
pole:
SELECT name FROM users GROUP BY name;
wynik:
ali
john
To idealne rozwiązanie. usuwanie kolumn, które tworzą GROUP BY
zmieszany. Oznacza to, że wiesz, co robisz. Zwykle nie potrzebujesz
tych kolumn, ale jeśli ich potrzebujesz, przejdź do Rozwiązania3 !
Rozwiązanie 2:
Wyłączanie only_full_group_by
. MYSQL wybierze jeden z dwóch możliwych wyników LOSOWO !! (W porządku, jeśli naprawdę nie obchodzi Cię, jaki id
wybierze, ale pamiętaj, aby włączyć go natychmiast po zapytaniu, aby zapobiec nieoczekiwanym zachowaniom w przyszłości groupBys)
Rozwiązanie3
Użyj Aggregate
funkcja jak MIN()
, MAX()
aby pomóc MYSQL w podjęciu decyzji, co musi wybrać.
Na przykład:
SELECT MAX(id), name FROM users GROUP BY name;
wynik:
2 john
3 ali
Wybierze ali
wiersz, który ma maksymalny id
.