Поиск(where) обрезает GROUP_CONCAT

349
26 ноября 2016, 20:25

Не могу понять, как сделать запрос, чтобы чертов (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

Получается:

Триллер
Триллер
Триллер

Но мне нужен весь массив жанров, я его вывожу на страницу.

Answer 1

Оставьте в выборке все жанры, что бы их захватил 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
READ ALSO
Проверка JSON - удаление и добавление в БД

Проверка JSON - удаление и добавление в БД

Нужна помощь с JSON и его взаимодействием с БДИмеется к примеру такой JSON

502
Почему MyISAM медленне MyISAM?

Почему MyISAM медленне MyISAM?

Один и тот же запрос в таблицу с 3млн строк

333
Как использовать mysql в django?

Как использовать mysql в django?

Использую django с python3При pip install mysql-python выдает ошибку: Command "python setup

463