如何在MySQL中检查是否使用了限制?

4
在mysql查询中,我选择和排序,并使用where子句等等...最后我有一个limit 10的例子。就像这样:
Select *
From employee
where fired=0
limit 10

问题在于,我该如何知道是否使用了 limit 并且结果被截断了?基本上,我想要轻松地知道是否有更多的结果被 limit 截断了。我不想做像这样的事情:
Select (count *)
From employee
where fired=0

减去
Select (count *)
From employee
where fired=0
limit 10

有没有简单的方法?也许,就像你知道在运行插入语句后,可以使用php内置函数get_sql_id()获取id一样,是否有sql_count_without_limit()这样的函数呢?

谢谢

3个回答

7
您可以这样做。
Select *
From employee
where fired=0
limit 10+1

因此:

0-10 values returned: no limit was reached
11 values returned: Limit was reached

然后只使用返回的前10个值。

更新 Raymond的答案比我的好多了!


抛出此错误:"#1064 - 您的SQL语法有误;请检查与您的MySQL服务器版本相对应的手册,以获取正确的语法使用方式,附近为'+1'". - Avatar

2
您可以像这样使用found_rows函数:
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();

更多信息请参阅 MySQL 参考文档


此函数已被弃用。建议使用两个单独的查询。一个带有LIMIT,另一个没有LIMIT。请参考https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_found-rows - Murolack

2
您可以按以下方式将剩余行作为列返回:
SET @limit = 10;

SELECT *,
(SELECT count(*) from employee)- @limit as remaining
From employee
where fired=0
limit 10

如果总行数为30,而您应用了limit=10,则剩余的行数将是30-10,即20。 - A.B
这也是一个很棒的答案,也许比Raymonds更好,因为我少做了一个php mysql查询。 - omega
实际上,如果我使用这个,那么我需要进行两个查询,一个用于获取结果,另一个则几乎使用相同的代码仅用于获取“remaining”。有没有一种方法将它们合并?如果没有,那么我认为 Raymonds 的答案更有效。 - omega
@omega,请在单个查询中检查它是否正常工作 :) - A.B
我尝试在初始查询中添加,count(*) as total这样的内容,但是它报错说不能没有分组就进行计数或类似的东西。 - omega
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接