У меня есть ошибка в моем коде, говорящая: «Недействительно в списке выбора, потому что он не содержится/агрегируется в предложении group by», вот так. Эта ошибка кажется мне знакомой в "MS SQL Server". Я не сталкивался с этой ошибкой раньше в MySQL. Эта ошибка возникла, когда я обновил свою версию Php до 7. Все мои предыдущие веб-программы до этого были затронуты.
Я попытался добавить больше столбцов в предложение «группировать по», ошибка исчезла, но результат не такой, как я ожидал. Код ниже — мой старый код.
SELECT SUM(s.pscore) as towtal, s.pscore AS totalScore, s.cri_id,
c.can_id, c.canid,c.can_name FROM score s INNER JOIN candidate c ON
s.can_id = c.can_id WHERE cat_id=1 AND s.cri_id = '".$rows['cri_id']."'
AND c.can_sex = 'Female' AND c.can_id='".$kert[$i]."'
GROUP BY s.can_id ORDER BY s.can_id ASC LIMIT 5
Когда я добавлю GROUP BY s.can_id, s.pscore, ошибок не будет, но результат не такой, как я ожидал
Вы открыты для SQL-инъекций, используйте подготовленные заявления.
Это моя старая программа, wayback 2016. Просто хочу это исправить
Вы, вероятно, захотите сгруппировать по идентификатору






зайдите в свою базу данных и в sql выполните эту команду
set GLOBAL sql_mode='';
Спасибо! Скажите, зачем нам это нужно? И почему сейчас у MySQL такая ошибка. Потому что в старой версии такой ошибки нет.
SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
Пример корректного запроса:
SELECT SUM(s.pscore) as towtal
, s.pscore AS totalScore
, s.cri_id
, c.can_id
, c.canid
, c.can_name
FROM score s
JOIN candidate c
ON s.can_id = c.can_id
WHERE cat_id = 1
AND s.cri_id = '".$rows['cri_id']."'
AND c.can_sex = 'Female'
AND c.can_id = '".$kert[$i]."'
GROUP
BY s.pscore
, s.cri_id
, c.can_id
, c.canid
, c.can_name
ORDER
BY s.can_id ASC
LIMIT 5;
Обратите внимание, что этот запрос уязвим для внедрения
Возможный дубликат Причина для столбца недопустима в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.