2014-01-05 16 views
0

我有3個表:MySQL的語法錯誤

user(id, name); 
advert(id,name,category_id,user_id); 
category(id,category_name); 

我想要做的是展示針對特定用戶,他有多少廣告在各個類別。 我必須使用子查詢。我試過這樣的東西,但根本不工作。 我已經試過這個樣子的:

SELECT c.id,c.name count(advert) number_of_adverts 
FROM category c 
GROUP BY c.name 
HAVING count(advert)=(SELECT count(a.id) 
        FROM advert a 
        INNER JOIN user ON a.user_id=u.id 
        WHERE u.id="1" 
        HAVING a.category_id=c.id); 

我知道這是不對的,但我不很明白我應該如何去做,使其工作。

+0

你可以請你的SQL風格稍微增加可讀性? – JeroenJK

回答

0

您正在尋找GROUP BY子句。

SELECT c.id, c.name, COUNT(a.id) AS number_of_adverts 
FROM user u 
JOIN advert a ON (u.id = a.user_id) 
JOIN category c ON (c.id = a.category_id) 
WHERE u.user_id = '999' 
GROUP BY c.id, c.name 

您不能使用子查詢,因爲每個類別可能有多個類別和多個廣告。