2014-09-24 2 views
1

У меня есть категории с id, с id и category и сообщениями с id и topic. Я хотел бы перечислить категории, а также количество тем, относящихся к каждой категории, а также количество сообщений, относящихся к тем, относящимся к этим категориям.Выделить все категории с тегом и числом

, что я использую до сих пор, чтобы собрать категорий и их соответствующую тему отсчитывает

select c.*, count(t.id) topics 
    from categories c 
    join topics t 
     on t.category=c.id 
    group by c.id 

Я попытался следующие, но это только дает мне тот же пост и тему счет

select c.*, count(t.id) topics, count(p.id) posts 
    from categories c 
    join topics t 
     on t.category=c.id 
    join posts p 
     on p.topic=t.id 
    group by c.id 

пытается left join, как представляется, не имеет значения

ответ

0

Используйте COUNT(DISTINCT t.id), чтобы считать только уникальные темы для каждой категории.

select c.*, count(DISTINCT t.id) topics, count(p.id) posts 
from categories c 
join topics t 
    on t.category=c.id 
join posts p 
    on p.topic=t.id 
group by c.id 

В качестве альтернативы, вы можете использовать подзапросы:

select c.*, 
    count(t.id) topics, 
    ( select count(p.id) 
     from posts p 
     where p.topic = t.id 
    ) posts 
from categories c 
join topics t 
    on t.category=c.id 
group by c.id 

или даже

select c.*, 

    ( select count(t.id) 
     from topics t 
     where t.category = c.id) topics, 

    ( select count(p.id) 
     from topics t 
     join posts p 
      on p.topic = t.id 
     where t.category = c.id) posts 
from categories c 

В данном конкретном случае count(distinct), очевидно, самый простой, но и в других случаях, подзапросы может дать вам больше возможности.

+1

Вау, это про самый простой ответ, который я получил здесь! – 2014-09-24 12:16:34

+1

Спасибо! Но если бы я знал, что вы скажете это, я бы не добавил всю главу о подзапросах. ;-) – GolezTrol

Смежные вопросы