1

这是我的 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

谢谢!

4

3 回答 3

3

尝试使用 join 和 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因为条件使用聚合。

这是sqlfiddle 上演示的链接

于 2012-10-18T01:51:18.543 回答
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
于 2012-10-18T01:52:13.550 回答
0

ORDER BY 子句需要数据库列名

于 2012-10-18T01:46:35.527 回答