检查带有LIMIT的SELECT语句是否返回了所有行

时间:2015-05-30 11:46:30

标签: mysql select limit rows

有没有办法检查带有LIMIT的SELECT语句是否返回了所有可能的行,例如我有LIMIT 50但是我有64行它应该添加false而如果我有28行它应该添加true。我想我可以通过做类似这样的事情来实现这个,但是只能用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;
}

1 个答案:

答案 0 :(得分:2)

评论太长了。您可以使用SQL_CALC_FOUND_ROWSFOUND_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(*)似乎更快(在这种情况下)。