我有一张产品表。我要在我的前端创建一个分页。所以我需要做这个选择:
select * from `product` limit 20 offset 0
我还需要产品表中的记录总数(我将显示页数)。我有个问题:
select count(*) as all from `product`
我想在一个查询中运行这两个查询。比如:
select *, count(*) as total from `hospedes` limit 20 offset 0
上述查询不起作用。有什么办法吗?
7tofc5zh1#
我不相信你可以把它作为一个查询来运行,除非你愿意放弃“限制”,只检索所有记录,对结果集进行计数,并丢弃除前20个以外的所有记录。
oipij1gg2#
我建议您运行两个查询。一个得到总数 COUNT(*) 然后为分页运行单独的查询。理论上你可以这样做:
COUNT(*)
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name -> WHERE id > 100 LIMIT 10; mysql> SELECT FOUND_ROWS();
这将使您获得与查询匹配的表的数量的信息,就像您没有使用 LIMIT . 阅读https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_found-行以获取详细信息它确实为您提供了正确的计数,但使用此方法通常会导致高性能成本。阅读https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/ 对于显示运行单独查询是更好的策略的测试。无可否认,这个博客是2007年的,测试是在MySQL5.0上进行的。您可以尝试在当前版本的mysql上重现他们的测试,看看从那时起是否有所改进。
LIMIT
2条答案
按热度按时间7tofc5zh1#
我不相信你可以把它作为一个查询来运行,除非你愿意放弃“限制”,只检索所有记录,对结果集进行计数,并丢弃除前20个以外的所有记录。
oipij1gg2#
我建议您运行两个查询。一个得到总数
COUNT(*)
然后为分页运行单独的查询。理论上你可以这样做:
这将使您获得与查询匹配的表的数量的信息,就像您没有使用
LIMIT
. 阅读https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_found-行以获取详细信息它确实为您提供了正确的计数,但使用此方法通常会导致高性能成本。
阅读https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/ 对于显示运行单独查询是更好的策略的测试。无可否认,这个博客是2007年的,测试是在MySQL5.0上进行的。您可以尝试在当前版本的mysql上重现他们的测试,看看从那时起是否有所改进。