2015-05-30 47 views
0

有沒有辦法檢查帶LIMIT的SELECT語句是否返回了所有可能的行,例如我有LIMIT 50但是我有64行它應該加假,如果我有28行它應該增加真實。我想我可以通過做一個這樣的事情來實現這一點,但它可能只有SQL?檢查帶LIMIT的SELECT語句是否返回了所有行

$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; 
} 

回答

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(*)似乎是(在這種情況下)更快。

+0

謝謝你回答我的問題,但經過一番研究,似乎count(*)更快,然後SQL_CALC_FOUND_ROWS https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to -sql_calc_found_rows /和http://stackoverflow.com/questions/186588/which-is-fastest-select-sql-calc-found-rows-from-table-or-select-count。有沒有隱藏的好處,我在這裏失蹤? – Maantje

+0

@marsje。 。 。 (1)這並不令我感到意外。 (2)非常感謝您收到評論。對於任何人在這個問題上陷入困境,這是有用的信息。 –