2016-01-21 19 views
-3

我想在PHP中開發知識庫系統。我試圖只返回有一個或多個帖子的類別。我有以下SQL代碼:需要幫助獲取類別,其中多個文章

SELECT `category_id`, `category_name` FROM `categories` WHERE(SELECT 
`category_id` FROM `posts` HAVING COUNT(`posts`.`post_id`) >= 1) ORDER BY 
`category_id` ASC 

我嘗試它,我得到的所有類別,而不只是那些有超過1周後在其中。我不確定問題是什麼。請幫助

+0

php在哪裏出現? –

+0

你是什麼意思 – wrichards0

+0

你被標記爲[php](http://stackoverflow.com/questions/tagged/php),但沒有代碼來支持這個問題。我們也不知道您使用哪個MySQL API進行連接。編輯:有人刪除了php標籤。 –

回答

1

如果你想1個或多個帖子,你只需要categoriesposts之間的簡單INNER JOIN。這將僅返回兩個表中存在category_id的行,這意味着該類別至少有1個帖子。

SELECT DISTINCT c.category_id, c.category_name 
FROM categories AS c 
JOIN posts AS p ON c.category_id = p.category_id 

如果你真的想要的類別,其中有超過1後,您可以使用GROUP BYCOUNT(*)

SELECT c.category_id, c.category_name 
FROM categories AS c 
JOIN posts AS p ON c.category_id = p.category_id 
GROUP BY c.category_id 
HAVING COUNT(*) > 1 
0

你缺少在WHERE語句要使用的柱:

SELECT `category_id`, `category_name` FROM `categories` WHERE category_id in 
(SELECT `category_id` FROM `posts` HAVING COUNT(`posts`.`post_id`) >= 1) 
ORDER BY `category_id` ASC 
1

#1:>1代替>=1

#2:你算的所有帖子,不是每個類別的職位。無論是切換到相關子查詢或更好:

SELECT `category_id`, `category_name` 
FROM `categories` AS c 
JOIN 
(SELECT `category_id` 
    FROM `posts` 
    GROUP BY category_id 
    HAVING COUNT(`posts`.`post_id`) > 1 
) AS p 
ON c.category_id = p.category_id 
ORDER BY `category_id` ASC 
+0

dnoeth釘了它。這將解決您的問題。您也可以考慮僅從您的子查詢中返回不同的category_ids。 –

+1

@BrandonBlack:'GROUP BY'總是返回不同的值,不需要添加。 – dnoeth

+0

問題說「1個或更多帖子」。這個答案是「超過1個職位」,這不是一回事。 – Barmar