Не могу понять, как сделать запрос, чтобы чертов (WHERE genre_id = 1) не обрезал массив в GROUP_CONCAT.
Общий вид таблиц:
idbook
book_id | genre_id
idgenre | genre
Вот такой запрос работает отлично:
SELECT
GROUP_CONCAT(genre) AS thisgenre,
FROM
book
LEFT JOIN
genre_book ON idbook = book_id
LEFT JOIN
genre ON genre_id = idgenre
GROUP BY idbook
Выводит:
Триллер
Триллер,Экшн,Приключения
Триллер,Психология,Постапокалиптика,Ужасы
А когда я пытаюсь добавить в поисковой запрос на жанры (WHERE genre_id = 1):
SELECT
GROUP_CONCAT(genre) AS thisgenre,
FROM
book
LEFT JOIN
genre_book ON idbook = book_id
LEFT JOIN
genre ON genre_id = idgenre
WHERE genre_id = 1
GROUP BY idbook
Получается:
Триллер
Триллер
Триллер
Но мне нужен весь массив жанров, я его вывожу на страницу.
Оставьте в выборке все жанры, что бы их захватил group_concat и отфильтруйте требуемые книги после группировки, т.е. в having:
SELECT GROUP_CONCAT(genre) AS thisgenre,
FROM book
LEFT JOIN genre_book ON idbook = book_id
LEFT JOIN genre ON genre_id = idgenre
GROUP BY idbook
HAVING sum(IF(genre_id=1,1,0))>0
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники