2010-11-08 90 views
1

我正在用PHP設計一個定製博客。在我的面板上,我有「類別」標題,並列出了類別以及每個類別中有多少帖子。有2個相關的表格,帖子和post_categories。PHP MySQL定製博客,列出類別

帖子 - POST_ID,POST_TITLE,張貼, CATEGORY_ID

POST_CATEGORIES - CATEGORY_ID, CATEGORY_NAME,POST_ID

我寧願不添加的未分類的類別,因爲這將導致我與我計劃設計的未來功能有關的問題。我給這家SQL是:

SELECT *, COUNT(*) AS category_post_count 
FROM post_categories, posts 
WHERE posts.category_id = post_categories.category_id 
GROUP BY category_name 

現在,如果一個職位沒有設置與CATEGORY_ID,它被賦予的0 CATEGORY_ID和post_categories將不相關的東西。我怎樣才能將這些在我的SQL語句中作爲未定製的?

謝謝。

+0

POST_CATEGORIES表中「post_id」的需求是什麼?這是否意味着每個POST都會有新的category_id?這沒有意義。類別到職位應爲1:n。你有1:1這可能不是博客應用程序的最佳方式。 – Stewie 2010-11-08 15:24:30

+0

不知道如何讓你的查詢完全適合你,但我可以提供一些其他信息。我知道你不想爲未分類創建一個行,但爲什麼?是不是因爲你不希望它出現在你網站的其他區域?如果是這種情況,然後改變你的SQl不返回結果的category_id爲0.如果它的絕對不是有一行未分類,那麼你可以做兩個查詢一個返回你的帖子,一個返回你的類別表,然後使用PHP做數學,如果其中一個帖子的類別標識爲0,則將其歸類爲未分類的類別。 – Brady 2010-11-08 15:28:21

回答

3

您可以執行左連接以包含任何沒有類別的帖子。

SELECT *, COUNT(*) as category_post_count 
FROM post_categories LEFT JOIN posts 
    ON posts.category_id = post_categories.category_id 
GROUP BY category_name; 
+0

太好了,謝謝。如果他們沒有category_name,我將如何從結果中調用它們? – DRKM 2010-11-08 15:53:23

+0

來自post_categories的fields category_id,category_name和post_id對於沒有類別的帖子都是NULL,所以在PHP中你可以簡單地檢查'$ row ['category_name'] === NULL'。 – Frode 2010-11-08 16:03:01

+0

感謝您對此的幫助。我剛剛給了SQL一個測試,它似乎沒有返回任何值爲null,即使在PhpMyAdmin中執行? – DRKM 2010-11-08 16:19:46