Есть связанные таблицы. Допустим книги, жанры и связующая "жанры книг". У книг, само собой, может быть несколько жанров. Как вытащить книги, которые имеют жанр "1", при этом захватив и остальные жанры одним запросом?
Я пришел к такому решению, "работает", но думаю есть более правильное, верное решение.
SELECT
b.id, GROUP_CONCAT(g.id) as gid
FROM book b
LEFT JOIN books_genre bg ON bg.books_id = b.id
LEFT JOIN genre g ON g.id = bg.genre_id
GROUP BY b.id
HAVING (FIND_IN_SET(1,gid))
P.S если можно посоветуйте хорошие учебники по SQL.
Структура таблицы книги:
id | name |
1 | book1 |
2 | book2 |
3 | book3 |
Структура таблицы жанры:
id | name |
1 | genre1 |
2 | genre2 |
3 | genre3 |
...
Структура таблицы жанры_книг:
id_book | id_genre |
1 | 1
1 | 2
2 | 2
3 | 1
3 | 2
3 | 3
результат запроса должен вывести:
b.id | gid |
3 | 1,2,3|
1 | 1,2 |
То есть мы хотим выбрать жанр фэнтези и делаем запрос в базу данных. А он нам должен вернуть книги с жанром фэнтези и так же их другие жанры.