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)

最後の行(順序付け)が機能せず、その理由を理解しています(サブクエリからこの値を出力しないため)。しかし、私にはその方法がわかりません。また、どのコマンドを探すべきかわかりません。

修理済み!!!これが私がしたことです:

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とgroupbyを使用してみてください。

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

ORDERBY句にはdb列名が必要です

于 2012-10-18T01:46:35.527 に答える