嗯,我刚刚发现了一种我从未见过的奇怪行为,或者没有注意到。
我正在使用此查询:
SELECT *,
COUNT(*) AS pages
FROM notis
WHERE cid = 20
ORDER BY nid DESC
LIMIT 0, 3
...阅读3个项目,但在这样做的时候,我想得到总行数。
...当我使用count时,查询只返回一行,但如果我删除
COUNT(*) AS pages
- 正如我想的那样,我得到了3行。显然,我在这里遗漏了一些东西。
答案 0 :(得分: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
或者这个:
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
根据您的SQL方言,嵌套表达式有差异。
答案 1 :(得分:9)
使用聚合函数而不使用 GROUP BY将始终返回一行,无论如何。如果要返回多行,则必须使用GROUP BY。
请注意,在大多数RDBMS上,这样的查询都会失败,因为它没有任何意义。
答案 2 :(得分:3)
效率低下,但可行:
SELECT
*,
(SELECT COUNT(*) FROM notis WHERE cid=20) AS pages
FROM notis
WHERE cid=20
ORDER BY nid DESC
LIMIT 0,3