我刚刚遇到了一个奇怪的行为,以前从未见过或者没有注意到。
我正在使用这个查询:
SELECT *,
COUNT(*) AS pages
FROM notis
WHERE cid = 20
ORDER BY nid DESC
LIMIT 0, 3
我想读取3个项目并获取总行数。
问题是...
...当我使用count时,查询只返回一行,但如果我删除COUNT(*) AS pages
,我会得到三行,这显然有些错误。
我刚刚遇到了一个奇怪的行为,以前从未见过或者没有注意到。
我正在使用这个查询:
SELECT *,
COUNT(*) AS pages
FROM notis
WHERE cid = 20
ORDER BY nid DESC
LIMIT 0, 3
我想读取3个项目并获取总行数。
...当我使用count时,查询只返回一行,但如果我删除COUNT(*) AS pages
,我会得到三行,这显然有些错误。
是的,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方言。
如果不使用 GROUP BY,使用聚合函数总是会返回一行结果。如果想要返回多行结果,必须使用 GROUP BY。
请注意,在大多数关系型数据库管理系统上,这样的查询将失败,因为它没有意义。
这种方法效率低下,但是可以工作:
SELECT
*,
(SELECT COUNT(*) FROM notis WHERE cid=20) AS pages
FROM notis
WHERE cid=20
ORDER BY nid DESC
LIMIT 0,3