我有一张产品表。
我要在我的前端创建一个分页。 所以我需要选择:
select * from `product` limit 20 offset 0
我还需要产品表中的记录总数(我将显示页数)。我有这个问题:
select count(*) as all from `product`
我想在一个查询中运行这两个查询。
类似的东西:
select *, count(*) as total from `hospedes` limit 20 offset 0
以上查询不起作用。有没有办法做到这一点?
答案 0 :(得分:1)
我不相信你可以将其作为一个查询来运行,除非你愿意放弃" LIMIT"并且只检索所有记录,对结果集进行计数,然后扔掉除前20个以外的所有记录。
答案 1 :(得分:1)
我建议您运行两个查询。一个从表中获取总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-rows了解详情
它确实为您提供了正确的计数,但使用此方法通常会导致高性能成本。
阅读https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/以获得一项测试,该测试表明这是一种运行单独查询的更好策略。不可否认,该博客是从2007年开始的,测试是在MySQL 5.0上进行的。您可以尝试在当前版本的MySQL上重现他们的测试,看看自那时起它是否有所改进。