在一个查询中选择两个

hc2pp10m  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(281)

我有一张产品表。
我要在我的前端创建一个分页。所以我需要做这个选择:

select * from `product` limit 20 offset 0

我还需要产品表中的记录总数(我将显示页数)。我有个问题:

select count(*) as all from `product`

我想在一个查询中运行这两个查询。
比如:

select *, count(*) as total from `hospedes` limit 20 offset 0

上述查询不起作用。有什么办法吗?

7tofc5zh

7tofc5zh1#

我不相信你可以把它作为一个查询来运行,除非你愿意放弃“限制”,只检索所有记录,对结果集进行计数,并丢弃除前20个以外的所有记录。

oipij1gg

oipij1gg2#

我建议您运行两个查询。一个得到总数 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上重现他们的测试,看看从那时起是否有所改进。

相关问题