2012-10-11 113 views
0

我試圖優化SQL請求的數量。 我發現,我已經使用了兩次相同的請求這樣的:有限制的結果數量總計

//a big select without limit 
$select="select * from tab1, tab2 ,tab 3 where (jointure..)"; 

// return to me 20 line 
$nbtotal=mysql_num_rows(mysql_query($select)); 
// I apply the limit for my paging system 5 per page 
$select.=" limit ".$offset.",".$limit; 

// all the information that i need to fetch 
$result_of_myrequest=mysql_query($select); 

我試過計數(article.id),但它返回給我一個很大的數字在每個算!

我可以結合在同一個請求(與限制0,5)$ nbtotal和我的請求的結果??

非常感謝!

+0

這取決於你想要什麼。你想要結果的總數,不是嗎?在知道之後,總共有多少結果,您從數據庫中獲得「少數選擇」。正確?現在,我知道這不是'JS'的標籤,但是如果你想要一個'低查詢數分頁',我會考慮使用它。 – ATaylor

+1

見已經回答了這個問題,其他: http://stackoverflow.com/questions/3453809/how-to-use-mysql-found-rows-in-php – Seth

回答

3

運行限值的查詢將返回您的結果顯示,那麼你可以調用另一個查詢:

SELECT FOUND_ROWS(); 

將從先前的查詢返回的行的總數,而忽略了極限。

//a big select with limit 
$select="select * from tab1, tab2 ,tab 3 where (jointure..) limit ".$offset.",".$limit; 

// all the information that i need to fetch 
$result_of_myrequest=mysql_query($select); 

// return to me 20 line 
$nbtotal = mysql_query("SELECT FOUND_ROWS()"); 
+0

它爲我工作,謝謝:) 我只是好奇這個查詢(SELECT FOUND_ROWS()),你認爲它運行相同的以前的查詢或它捕獲前一個結果或類似的VAR? (我只關心優化,我不知道這個查詢是否比前一個更輕。) – ranell

+1

「SELECT FOUND_ROWS()」的性能可以忽略不計。 SQL旨在處理大量查詢,大量查詢和大量數據。這個查詢比較小,所以沒有什麼可擔心的。我們公司擁有多達100個表格,數百萬條記錄等數據庫,而且我們的Web服務幾乎可以立即爲用戶加載。爲了回答這個問題,我並不確定,但我認爲它緩存了LIMIT查詢的結果,因爲限制查詢返回所有行,然後截斷不必要的行,並且僅返回總行數。 – MatthewMcGovern