2016-10-10 73 views
0

我有以下查詢:選擇類別,子類別和1個查詢主題數

SELECT 
     c.frm_category_id, 
     c.name, 
     c.slug, 
     s.frm_category_id, 
     s.name, 
     s.slug, 
     IFNULL(COUNT(t.frm_topic_id),0) 
FROM 
     frm_categories AS c 
LEFT JOIN 
     frm_categories AS s 
    ON 
     c.frm_category_id = s.parent_frm_category_id 
LEFT JOIN 
     frm_topics AS t 
    ON 
     s.frm_category_id = t.frm_category_id      
WHERE 
     c.active = 1 
    AND 
     s.active = 1 
ORDER BY 
     c.frm_category_id ASC, 
     s.frm_category_id ASC 

我想做到的是以下幾點:

我想選擇所有的父類(即使他們沒有子類別),並且我想要統計每個子類別中的所有主題(主題只能發佈在子類別中,而不是發佈在類別中)。

該查詢的工作原理只有一個:它只選擇包含子類別的類別,而只選擇包含主題的子類別。

有人可以解決這個問題嗎?或者給我一個有用的技巧來解決這個問題?

在此先感謝!

回答

1

按照frm_topics表的邏輯錯誤分組,並且最好將過濾器放在on子句中,而不是在外連接中的where子句中。

SELECT 
     c.frm_category_id, 
     c.name, 
     c.slug, 
     s.frm_category_id sub_cate_id, 
     s.name, 
     s.slug, 
     IFNULL(tpc_count,0) 
FROM 
     frm_categories AS c 
LEFT join 
     frm_categories AS s 
    on 
     c.frm_category_id = s.parent_frm_category_id and c.active = 1 and s.active = 1 
LEFT JOIN 
(select frm_category_id, count(1) tpc_count from 
     frm_topics group by frm_category_id)AS t 
    ON 
     s.frm_category_id = t.frm_category_id 

sql fiddle

+0

我道歉的邀請,可是我該怎麼辦這到底? – yesterday

+0

@昨天更新了我的答案。 – amow

+0

這不起作用。主動意味着「是類別/子類別活動」是(1)或否(0)。不幸的是我仍然得到了同樣的結果。無論如何,謝謝你的努力,很好。 – yesterday

0

我現在有以下查詢:

SELECT 
      c.frm_category_id, 
      c.name, 
      c.slug, 
      s.frm_category_id, 
      s.name, 
      s.slug 
FROM 
      frm_categories AS c 
LEFT JOIN(
     SELECT 
       frm_category_id, 
       parent_frm_category_id, 
       name, 
       slug 
     FROM 
       frm_categories 
     WHERE 
       parent_frm_category_id != 0 
) AS s 
     ON 
      c.frm_category_id = s.parent_frm_category_id    
WHERE 
      c.parent_frm_category_id = 0 
ORDER BY 
      c.frm_category_id ASC 

它適用於一部分:我現在得到的所有門類,擁有子類別的那些和那些沒有類別。

現在我想補充一點的是統計的所有主題中每個子類

表:主題

frm_topic_ic,frm_category_id,標題

相關問題