php - MySQL COUNT 和 List 10 查询

标签 php mysql

我试图让 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/

相关文章:

php: is_null 和数据库结果

java - 无法找出 JDBC 错误

MySQL 统计记录频率

python - 如何使用mysql在数据库端声明默认高精度日期时间default + onupdate

sql - Doctrine ORM - 自连接,没有任何实际关系

php - 乔姆拉!模型覆盖

php - 在类的构造函数中返回一个值

php - 生成具有真实信息的 2,000 名用户的列表

php - CURL 和 PHP Geocoder 中的连接在 10000 毫秒后超时

mysql - mysql子查询返回多行错误