2016-11-22 55 views
1

可以將SELECT SQL_CALC_FOUND_ROWS和FOUND_ROWS()用作一個查詢嗎?可以將MySQL SQL_CALC_FOUND_ROWS和FOUND_ROWS()用作一個查詢嗎?

$query = 'SELECT SQL_CALC_FOUND_ROWS * FROM Users LIMIT 0,50'; 
    mysql_query($query); 
    $count_query = 'SELECT FOUND_ROWS()'; 
    mysql_query($query); 

如果不是 - 那麼什麼意思? 爲什麼不只是使用這兩個查詢?

$query = 'SELECT * FROM Users LIMIT 0,50'; 
$count_query = 'SELECT COUNT(*) FROM Users'; 

好處? 缺點? 差異?

我更喜歡的是隻進行一次調用 - 帶有限制 - 以及一個列表中的所有記錄的總記錄數。

如果這是不可能的 - 我想了解上述兩種方法之間的區別。

回答

2

區別在於SELECT COUNT(*) FROM Users必須對行進行計數。對於某些數據庫引擎而言,這可能很昂貴(MyISAM將表格大小保留在元數據中,因此很便宜)。由於先前的查詢已經必須掃描所有行,並且您告訴它記住計數,因此FOUND_ROWS()僅返回保存的計數。

但是,除非在第一個查詢中使用LIMIT,否則在使用FOUND_ROWS()時幾乎沒有意義。你可以簡單地使用:

$result = mysql_query($query); 
$row_count = mysql_num_rows($result); 

SQL_CALC_FOUND_ROWS主要好處是,當查詢包含LIMIT條款。 FOUND_ROWS()返回在沒有該選項的情況下返回的總行數。這對於分頁非常有用,因爲您可以從中計算總頁數,而無需執行另一個使用COUNT(*)的查詢。

+0

這是兩種不同的調用方式嗎? –

+1

是的,獲得'FOUND_ROWS()'的調用必須是一個單獨的查詢。 – Barmar

+0

認爲它可以在結果或別的行中傳遞......你知道像SELECT SQL_CALC_FOUND_ROWS AS MY_COUNT –

相關問題