only_full_group_by =ativado diz ao mecanismo MySQL:Não aplique
GROUP BY quando você tem dúvidas sobre quais resultados mostrar e lança um erro. Somente aplique-o se Group By especificamente lhe diz o que fazer. ou seja, quando o Group By é completo e perfeito! only_full_group_by =desativado diz ao mecanismo MySQL:sempre aplique
GROUP BY e se você tiver dúvidas sobre quais resultados escolher, basta escolher um aleatoriamente! Você não precisa desativá-lo se usar
GROUP BY corretamente! Exemplo:
Tabela:usuários
id | name
----------------
1 ali
2 john
3 ali
Quando você usa
GROUP BY no name coluna:SELECT * FROM users GROUP BY name;
Há dois resultados possíveis:
1 ali
2 john
OU
2 john
3 ali
MYSQL não sabe qual resultado escolher! Porque existem diferentes
id s, mas ambos têm name=ali . Solução1:
selecionando apenas o
name campo:SELECT name FROM users GROUP BY name;
resultado:
ali
john
Esta é uma solução perfeita. removendo colunas que tornam
GROUP BY confuso. Isso significa que você sabe o que está fazendo. Normalmente, você não precisadessas colunas, mas se precisar delas, vá para Solução3 !
Solução2:
Desativando
only_full_group_by . O MYSQL escolherá um dos dois resultados possíveis RANDOMLY !! (Tudo bem se você realmente não se importa com o que id ele escolherá, mas lembre-se de ligá-lo imediatamente após sua consulta para evitar comportamentos inesperados em futuros groupBys) Solução3
Use um
Aggregate função como MIN() , MAX() para ajudar o MYSQL a decidir o que deve escolher. Por exemplo:
SELECT MAX(id), name FROM users GROUP BY name;
resultado:
2 john
3 ali
Ele escolherá o
ali linha que tem o máximo id .