Группировка результатов из нескольких таблиц

У меня есть 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;

Вы можете присоединиться к дополнительным столбцам в подзапросе.

Другие вопросы по тегам