@Farrien
Tell me who

Что за ошибка с GROUP BY в запросе?

Этот запрос работает у меня. Но на сервере, настроенный давно уволившимся админом - нет!
SELECT albums.id, albums.name, photos.thumb_url
		FROM `custom_app_bigd_gallery_albums` albums
		LEFT JOIN `custom_app_bigd_gallery` photos ON albums.id=photos.album_id
		WHERE photos.thumb_url IS NOT NULL
		GROUP BY photos.album_id
		ORDER BY albums.id DESC
		LIMIT 0, 25


Выдает эту ошибку
Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'photos.thumb_url' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by


Суть запроса - вернуть список альбомов, с прикрепленными к ним по одному фото.
  • Вопрос задан
  • 220 просмотров
Решения вопроса 2
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
вы не описали логику, как в одну колонку строки результата по каждому альбому положить много линок на обложки. колонка одна, а значений много. поэтому и ошибка.

в старых версиях движок не считал это ошибкой, рандомно выбирая одно значение. но это неверное поведение и оно было исправлено. а возможность отключить sql_mode=only_full_group_by ввели для обратной совместимости.

можно решить вашу задачу так.
SELECT albums.id, albums.name,
 (SELECT photos.thumb_url  FROM `custom_app_bigd_gallery` photos WHERE albums.id=photos.album_id AND photos.thumb_url IS NOT NULL ORDER BY RAND() LIMIT 1) 
FROM `custom_app_bigd_gallery_albums` albums
WHERE EXISTS (SELECT 'x' FROM `custom_app_bigd_gallery` photos WHERE albums.id=photos.album_id AND photos.thumb_url IS NOT NULL)
ORDER BY albums.id DESC
LIMIT 0, 25
Ответ написан
Комментировать
LaRN
@LaRN
Senior Developer
Можно добавить агрегирующий функции и поправить немного группировку:
SELECT albums.id, albums.name, min(photos.thumb_url)
    FROM `custom_app_bigd_gallery_albums` albums
    LEFT JOIN `custom_app_bigd_gallery` photos ON albums.id=photos.album_id
    WHERE photos.thumb_url IS NOT NULL
    GROUP BY photos.album_id, albums.name
    ORDER BY albums.id DESC
    LIMIT 0, 25
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@bacon
MySQL позволяет делать невалидные с точки зрения стандартов SQL-запросы. Вы как раз сделали такой. Достаточно перевести ошибку, чтобы понять о чем речь, так же в ней описано как настроить сервер чтобы такие запросы проходили.
Ответ написан
Комментировать
@sidni
Php Developer
Там же написано чтобы этот запрос работал нужно на сервере выключить мод я так понял ваш сервер работает в режиме strict, поменяйте настройки

[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Cbonds.ru Санкт-Петербург
от 200 000 ₽
Милти Москва
от 150 000 ₽
QIWI Екатеринбург
от 140 000 ₽
17 мая 2022, в 00:28
20000 руб./за проект
16 мая 2022, в 23:42
7000 руб./за проект
16 мая 2022, в 22:34
3000 руб./за проект