Как вытащить все связанные столбцы зная id одного?

Есть связанные таблицы. Допустим книги, жанры и связующая "жанры книг". У книг, само собой, может быть несколько жанров. Как вытащить книги, которые имеют жанр "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 |

То есть мы хотим выбрать жанр фэнтези и делаем запрос в базу данных. А он нам должен вернуть книги с жанром фэнтези и так же их другие жанры.
  • Вопрос задан
  • 293 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Terran37
Программист
Я бы посоветовал сайт sql-ex.ru
Там упражнения на sql от простых до сложных. Очень помогает.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы