我试图让 MySQL 输出表的 COUNT,然后输出前 10 个结果。
要列出表格的前 10 个结果,我是这样做的:
SELECT * FROM SomeTable LIMIT 0,10
这很简单,而且效果很好......但是:我还想计算我总共有多少个条目并将其附加到查询中,这样我就不需要执行 2 个查询,浪费资源。
如果我这样做:
SELECT *, COUNT(*) FROM SomeTable LIMIT 0, 10
它返回一个错误,说:
[Err] 1140 - In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'work.SomeTable.ID'; this is incompatible with sql_mode=only_full_group_by
然后我决定使用 GROUP BY,但同样,它没有返回我想要的结果:
SELECT *, COUNT(*) FROM SomeTable GROUP BY SomeTable.ID LIMIT 0, 10
返回我:
ID | Something1 | Something 2 | ... | COUNT(*)
1 Lorem Ipsum ... 1
2 Lorem Ipsum ... 1
3 Lorem Ipsum ... 1
... ... ... ... ...
10 Lorem Ipsum ... 1
最后,我是这样尝试的:
SELECT *, ( SELECT COUNT(*) FROM SomeTable ) FROM SomeTable GROUP BY SomeTable.ID LIMIT 0, 10
哪个返回:
ID | Something1 | Something2 | ... | COUNT(*)
1 Lorem Ipsum ... 13
2 Lorem Ipsum ... 13
3 Lorem Ipsum ... 13
... ... ... ... ...
10 Lorem Ipsum ... 13
13 是表的大小,这很好,但是对每个条目重复这个在某种程度上是资源浪费......
我的目标是让它像这样输出:
ID | Something1 | Something2 | ...
1 Lorem Ipsum ...
2 Lorem Ipsum ...
3 Lorem Ipsum ...
... ... ... ...
10 Lorem Ipsum ...
-------------------------------------
COUNT(*) |
13
我是无知的。非常感谢任何帮助。
最佳答案
您不能在 MySQL 或任何其他 RDMS 的一个结果集中返回两种不同“类型”的行。
它们必须是两个不同的查询,或者您可以执行您已经找到的内容。
您似乎想要表的总大小,加上前 10 个结果。这通常通过两个查询来完成,一个是调用 SELECT COUNT(*) FROM table
,另一个是您要返回的集合。不要害怕调用 COUNT(*)
,这通常不会执行完整的表扫描,因为 SQL 引擎会跟踪表中的总记录数。
关于php - MySQL COUNT 和 List 10 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45961409/