使用Count时,Mysql只返回一行

Bre*_*zer 8 mysql count limit

好吧,我刚刚发现了一种我从未见过的奇怪的行为,或者没有注意到.

我正在使用此查询:

  SELECT *, 
         COUNT(*) AS pages 
    FROM notis 
   WHERE cid = 20 
ORDER BY nid DESC 
   LIMIT 0, 3
Run Code Online (Sandbox Code Playgroud)

...阅读3个项目,但在这样做时我想得到总行数.

问题是......

...当我使用count时,查询只返回一行,但是如果我删除 COUNT(*) AS pages- 我得到了3行,正如我想的那样.显然,我在这里遗漏了一些东西.

McK*_*Kay 13

是的,count是一个聚合运算符,只返回一行(没有group by子句)

也许做两个单独的查询?让行返回数据和总行数是没有意义的,因为该数据不属于一起.

如果你真的想要它,你可以这样做:

SELECT *, (select count(*) FROM notis WHERE cid=20) AS count FROM notis WHERE cid=20 ORDER BY nid DESC LIMIT 0,3
Run Code Online (Sandbox Code Playgroud)

或这个:

SELECT N.*, C.total from notis N join (select count(*) total FROM notis WHERE cid=20) C WHERE cid=20) AS count FROM notis WHERE cid=20 ORDER BY nid DESC LIMIT 0,3
Run Code Online (Sandbox Code Playgroud)

根据您的SQL方言,嵌套表达式的差异.


Vin*_*ard 9

使用没有 GROUP BY 的聚合函数将始终返回一行,无论如何.如果要返回多行,则必须使用GROUP BY.

请注意,在大多数RDBMS上,这样的查询会失败,因为它没有意义.