После обновления до MySQL 5.7.11 мы получаем ряд ошибок, связанных с sql_mode, включая only_full_group_by.
Исследования показывают, что мы можем отключить это, но, вероятно, было бы лучше знать, как достичь намеченной цели с помощью правильно структурированных операторов SQL.
Ошибка:
#1140 - In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'tblslideshow.slideImage'; this is incompatible with sql_mode=only_full_group_by
Запрос:
SELECT
tblslideshow.slideImage,
COUNT(tblslideshow.slideID) AS countVal
FROM
tblslideshow
WHERE
tblslideshow.parentID = 3424
Цель состоит в том, чтобы вернуть список значений, а также счетчик для всех возвращенных записей. Как лучше всего достичь этой цели без изменения MySQL my.ini? И почему это ошибка Group By, если мы даже не группируемся? Или группировка - часть правильного решения?
Ожидаемый результат должен быть:
slideImage | countVal
Image1.jpg | 3
Image2.jpg | 3
Image3.jpg | 3
Обновлено: поскольку мы используем PHP и MySQLi, может быть разумнее исключить Count () и просто использовать «mysqli_num_rows»
Вам не хватает GROUP BY. Все ваши неагрегированные столбцы должны быть в GROUP BY.
Вы совершенно правы. Это был дерьмовый запрос, и после проверки кода остальных страниц слайд-изображение больше нигде не использовалось. Функция count () могла бы существовать отдельно без столбца slideImage. @ D-Shih действительно произвел рабочий запрос для заявленной цели. И мы еще не готовы к MySQL 8.0.11.
Привет. Это часто задаваемые вопросы. Пожалуйста, всегда гуглите много ясных, кратких и конкретных версий / формулировок вашего вопроса / проблемы / цели с вашими конкретными строками / именами и без них и читайте много ответов. Добавьте в поисковые запросы релевантные ключевые слова, которые вы обнаружите. Если вы не нашли ответа, опубликуйте сообщение, используя поиск по одному из вариантов по заголовку и ключевым словам для тегов.






Когда вы используете Агрегатная функция, вам нужно добавить неагрегированные столбцы в предложение Group by.
SELECT
tblslideshow.slideImage,
COUNT(tblslideshow.slideID) AS countVal
FROM
tblslideshow
WHERE
tblslideshow.parentID = 3424
Group by tblslideshow.slideImage
РЕДАКТИРОВАТЬ
Вы можете попробовать использовать подзапрос на select
SELECT t.slideImage,
(
SELECT
COUNT(tblslideshow.slideID) AS countVal
FROM
tblslideshow
WHERE
tblslideshow.parentID = 3424
) countVal
FROM tblslideshow t
WHERE t.parentID = 3424
К сожалению, это создает countVal для каждой записи как 1, а не цель общего количества всех записей, возвращенных из запроса.
Не могли бы вы предоставить образцы данных и ожидать результата?
Приведен пример. countVal должен быть Count () или Sum всех извлеченных записей.
Вам нужен COUNT OVER, доступный начиная с MySQL 8.0:
SELECT
tblslideshow.slideImage,
COUNT(*) OVER () AS countVal
FROM
tblslideshow
WHERE
tblslideshow.parentID = 3424;
Это сохраняет отдельные строки и добавляет к ним совокупное значение.
Использование агрегатной функции (здесь
COUNT) агрегирование является. БезGROUP BYполучается одна строка. MySQL жалуется, что не знает, какойslideImageотображать в этой строке.