检查带有 LIMIT 的 SELECT 语句是否返回了所有行
Check if SELECT statement with LIMIT returned all rows
有没有办法检查带有 LIMIT 的 SELECT 语句是否返回所有可能的行,例如我有 LIMIT 50 但我有 64 行它应该添加 false 如果我有 28 行它应该添加真的。我想我可以用 php 做这样的事情来实现这个,但是只有 SQL 有可能吗?
$sql= "(SELECT * FROM tbl_group_message WHERE gid = ".$gid." ORDER BY mid DESC LIMIT ".$more.") ORDER BY mid ASC";
$messages = mysqli_query($dbc,$sql);
$row_cnt1 = mysqli_num_rows($messages);
$sql = "(SELECT COUNT(*) FROM tbl_group_message WHERE gid = ".$gid." ORDER BY mid DESC) ORDER BY mid ASC";
$messages = mysqli_query($dbc,$sql);
$row_cnt2 = mysqli_num_rows($messages);
if(row_cnt1 < $row_cnt2){
$allinlimit = true;
}
else{
$allinlimit = false;
}
您可以使用 SQL_CALC_FOUND_ROWS
和 FOUND_ROWS
:
$sql= "SELECT SQL_CALC_FOUND_ROWS * FROM tbl_group_message WHERE gid = ".$gid." ORDER BY mid DESC LIMIT ".$more." ORDER BY mid ASC";
然后运行查询SELECT FOUND_ROWS()
作为对数据库的下一个查询。
更多信息在 documentation。
编辑:
正如 OP 指出的那样,COUNT(*)
似乎更快(在这种情况下)。
有没有办法检查带有 LIMIT 的 SELECT 语句是否返回所有可能的行,例如我有 LIMIT 50 但我有 64 行它应该添加 false 如果我有 28 行它应该添加真的。我想我可以用 php 做这样的事情来实现这个,但是只有 SQL 有可能吗?
$sql= "(SELECT * FROM tbl_group_message WHERE gid = ".$gid." ORDER BY mid DESC LIMIT ".$more.") ORDER BY mid ASC";
$messages = mysqli_query($dbc,$sql);
$row_cnt1 = mysqli_num_rows($messages);
$sql = "(SELECT COUNT(*) FROM tbl_group_message WHERE gid = ".$gid." ORDER BY mid DESC) ORDER BY mid ASC";
$messages = mysqli_query($dbc,$sql);
$row_cnt2 = mysqli_num_rows($messages);
if(row_cnt1 < $row_cnt2){
$allinlimit = true;
}
else{
$allinlimit = false;
}
您可以使用 SQL_CALC_FOUND_ROWS
和 FOUND_ROWS
:
$sql= "SELECT SQL_CALC_FOUND_ROWS * FROM tbl_group_message WHERE gid = ".$gid." ORDER BY mid DESC LIMIT ".$more." ORDER BY mid ASC";
然后运行查询SELECT FOUND_ROWS()
作为对数据库的下一个查询。
更多信息在 documentation。
编辑:
正如 OP 指出的那样,COUNT(*)
似乎更快(在这种情况下)。