任何人都可以看看我的SQL?

时间:2012-10-18 01:44:50

标签: mysql sql

这是我的SQL(MySQL)命令:

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)

最后一行(order by)不起作用,我理解为什么(因为我不从子查询输出这个值)。但我不知道怎么做,也不知道要找什么命令。

固定!!! 这是我做的:

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 个答案:

答案 0 :(得分:3)

尝试使用联接和分组,如下所示:

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

答案 1 :(得分: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

答案 2 :(得分:0)

ORDER BY子句需要db列名