2012-10-18 69 views
1

這是我的SQL(MySQL的)命令:任何人都可以看看我的SQL?

SELECT pp.pluginid 
FROM plugins pp 
WHERE 
    (pp.limit=-1) 
    OR 
    (pp.limit>(select count(a.pluginid) from ads a where a.pluginid = pp.pluginid)) 
ORDER BY count(a.pluginid) 

最後一行(按順序)不工作,我明白爲什麼(因爲我不輸出子查詢此值)。但我不知道如何,也不知道要尋找什麼命令。

固定!!! 這是我做的:

SELECT pp.pluginid, (select count(a.pluginid) from ads a where a.pluginid = pp.pluginid) as bb 
FROM plugins pp 
WHERE 
    (pp.limit=-1) 
    OR 
    (pp.limit>(select count(a.pluginid) from ads a where a.pluginid = pp.pluginid)) 
ORDER BY bb 

謝謝!

回答

3

嘗試使用聯接和GROUP BY,這樣的:

SELECT pp.pluginid,pp.limit 
FROM plugins pp 
LEFT OUTER JOIN ads a ON a.pluginid = pp.pluginid 
GROUP BY pp.pluginid 
HAVING pp.limit=-1 OR pp.limit > COUNT(1) 
ORDER BY COUNT(1) 

請注意,您需要使用HAVING代替WHERE因爲條件使用的聚合。

這是link to a demo on sqlfiddle

+0

有沒有辦法只能輸出pp.pluginid? (保持相同的結構) –

+0

@JohnSmith絕對 - 你可以將它包裝在另一個選擇中,並投射不需要的列。看看:[鏈接](http://sqlfiddle.com/#!2/65658/14)。 – dasblinkenlight

1

我不知道這是否是你想要什麼,但嘗試:

SELECT pp.pluginid, count(a.pluginid) nads 
    FROM plugins pp 
    JOIN ads a ON a.pluginid = pp.pluginid 
    WHERE pp.limit = -1 
    OR pp.limit > nads 
    GROUP BY a.pluginid 
    ORDER BY nads 
相關問題