2012-10-09 77 views
0

我有一張有很多數據的表,所以我檢索它並一次顯示一頁(我的請求很長,所以沒有辦法在整個表上運行它)。如何獲取MySql無限制返回的結果數量?

但我想分頁的結果,所以我需要知道什麼是我的表中的元素的總數。

如果我在同一個請求中執行COUNT(*),我得到選定元素的數量(在我的情況下爲10)。

如果我在第二個請求中對我的表執行COUNT(*),結果可能是錯誤的,因爲我的主查詢中的where,join和having子句。

什麼是最徹底的方法:

  • 檢索數據
  • 知道我的表元素的最大數量爲這個特定的請求

一種解決方案似乎是使用Mysql function FOUND_ROWS

我試過這個,因爲mysql_query perfo同時RMS一個查詢:(採取here

$query = 'SELECT SQL_CALC_FOUND_ROWS * FROM Users'; 
$result = mysql_query($query); 
// fetching the results ... 

$query = 'SELECT FOUND_ROWS()'; 
$ result = mysql_query($query); 

// debug 
while ($row = mysql_fetch_row($result)) { 
    print_r($row); 
} 

而且我得到0的結果數組:

Array ([0] => 0) 

而我的查詢會返回結果。

我的方法有什麼問題?你有更好的解決方案嗎?

+1

'mysql_num_rows()'? –

+0

您沒有將結果存儲到任何位置的$ result變量...... – Vafliik

+0

@MihaiIorga mysql_num_rows受LIMIT子句的影響。在我的情況下,它返回10. –

回答

0

上面的代碼正常工作。我沒有正確打開連接。

輸出是:

Array ([0] => 10976) 

我仍然有興趣爲其他的方式來做到這一點,尤其是一些不依賴於mysql的。

+0

MySQL是實現它的最好方式,它比您對PHP所能做的任何事情都瞭解數據庫。 – MatthewMcGovern

+0

你會選擇什麼樣的選擇,但我強烈建議在你的查詢中運行基準。儘管SQL_CALC_FOUND_ROWS看起來不錯,但大多數情況下這是關於性能的不好選擇。 請參閱[http://www.mysqlperformanceblog.com/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows] –

0

如果是On,請設置mysql.trace_modeOff

ini_set('mysql.trace_mode','Off');根據您的主機配置也可以工作,如果你不能編輯my.cnf中

如果這不會讓你發佈上述工作的代碼,那麼你就需要無極限和計數再次運行查詢就這樣。