Группировка результатов из нескольких таблиц
У меня есть 6 таблиц: 3 для общих данных об аниме / манге / яйцеклетках / что угодно и 3 для их жанров, что является отношением 1-к-м
anime: manga: ova:
aid | data | ... | mid | data | ... | oid | data | ... |
----+------+-----+ ----+------+-----+ ----+------+-----+
1 | .... | ... | 1 | .... | ... | 1 | .... | ... |
2 | .... | ... | 2 | .... | ... | 2 | .... | ... |
3 | .... | ... | 3 | .... | ... | 3 | .... | ... |
4 | .... | ... | 4 | .... | ... | 4 | .... | ... |
anime_genre: manga_genre: ova_genre:
aid | genre mid | name oid | genre
----+-------- ----+---------- ----+--------
1 | Ecchi 1 | Drama 1 | Action
1 | Action 2 | Ecchi 2 | Action
2 | Action 3 | Fighting 3 | Drama
3 | Drama 4 | Action 4 | Ecchi
4 | Action
Я пытаюсь группировать результаты, когда кто-то ищет жанр, чтобы получить всю информацию в одном запросе.
Случай 1:
result on genre = Action:
genre | ids
--------+---------------------------------------------
Action | 1:anime 2:anime 4:anime 4:manga 1:ova 2:ova
result on genre = Ecchi:
genre | ids
--------+-------------------------------
Ecchi | 1:anime 4:anime 2:manga 4:ova
Случай 2 (предпочтительно):
result on genre = Action:
genre | id | common data | common data | common data
--------+---------+-------------+-------------+-------------
Action | 1:anime | ... | ... | ...
Action | 2:anime | ... | ... | ...
Action | 4:anime | ... | ... | ...
Action | 4:manga | ... | ... | ...
Action | 1:ova | ... | ... | ...
Action | 2:ova | ... | ... | ...
result on genre = Ecchi:
genre | id | common data | common data | common data
-------+---------+-------------+-------------+-------------
Ecchi | 1:anime | ... | ... | ...
Ecchi | 4:anime | ... | ... | ...
Ecchi | 2:manga | ... | ... | ...
Ecchi | 4:ova | ... | ... | ...
Я весь день ломал голову и мог добиться желаемого результата только за одним столом. Мне не удается получить результаты для всех трех в одном запросе.
Есть идеи? Может ли кто-нибудь указать мне правильное направление? (В таблицах данных есть некоторые столбцы, которые не являются общими, но мне все равно, получаю ли я нулевые значения для них, потому что я анализирую результаты в js)
2 ответа
Поиск mysql join, вы можете объединять таблицы и искать между несколькими таблицами для поиска соответствующих ответов.
Вы можете получить список id
с помощью union all
:
select ag.genre, 'anime' as which, ag.aid as id
from anime_genre ag
union all
select mg.genre, 'manga' as which, mg.mid as id
from manga_genre mg
union all
select og.genre, 'ova' as which, og.oid as id;
from ova_genre og;
Вы можете присоединиться к дополнительным столбцам в подзапросе.