категории
id -- PK
pid -- FK to self (id), allow NULL
name
description
slug
Теги
id -- PK
name
description
slug
Cat_Rel
id -- PK
pid -- FK: Post Id
cid -- FK: Category Id
Tag_Rel
id -- PK
pid -- FK: Post Id
tid -- FK: Tag Id
Мне нужен этот результат в одном запросе:
строка: pid | tag1, tag2, tag3 | cat1, cat5
Я бы сделал это с двумя подзапросами и union all
:
select pid, max(tags), max(cats)
from ((select t.pid, group_concat(t.name) as tags, NULL as cats
from tag_rel tr join
tags t
on tr.tid = .tid
group by t.pid
) union all
(select c.pid, NULL, group_concat(c.name) as cats
from cat_rel cr join
cats c
on cr.cid = c.id
)
) ct
group by pid;
Это гарантирует, что вы получите все сообщения, даже те, у которых нет тегов и / или нет категорий.
Других решений пока нет …