2012-03-27 133 views
1

用來限制使用PHP是以下MySQL數據庫獲取的結果的默認代碼,如何計算使用PHP和MySQL時while循環的總迭代次數?

$sql="SELECT * 
FROM `tablename` 
WHERE `Type` LIKE '$var1' 
LIMIT 0 , 30"; 

當我們需要不斷地顯示結果我們可以改變與以下

$start=0; $end=30; 
$start=$_GET['start']; 
$end=$start+30; 
$sql="SELECT * 
FROM `tablename` 
WHERE `Type` LIKE '$var1' 
LIMIT $start , $end"; 

代碼所以我通過鏈接說變量開始的值如下Next Next像這樣

<a href="something.php?start=<? $start+30 ?>">Next</a> 

一切都很好,當有mo重新顯示結果。

請考慮這種情況:數據庫中有120個條目,PHP文件當前顯示的結果是91到120.因此,當我單擊下一個鏈接時,它顯示空白。那麼,如何才能在顯示最後一組結果時禁用「下一步」鏈接?如果我們知道數據庫中的條目總數,我認爲這是可能的。但如果它是動態的,我們如何計算它呢?

+1

'SELECT COUNT(*)FROM \'tablename \'WHERE \'Type \'LIKE'$ var1'' – JJJ 2012-03-27 19:09:34

+0

哇!謝謝它工作! – 2012-03-27 19:13:00

+0

我們可以將它存儲在變量中嗎? – 2012-03-27 19:22:09

回答

2

如果對結果使用COUNT()函數,則可以返回簡單信息。

例如:

$total=mysql_fetch_assoc("SELECT COUNT(*) AS `total` FROM `tablename` WHERE `Type` LIKE '$var1'"); 

返回的值是,符合給定的標準的條目的總數。所以:

$total['total']==120; 

然後,您可以簡單地做線沿線的東西:

if (($start+30)>=$total['total']) { 
    //Greyed out link 
} 
else { 
    //Active link 
} 

這可能也是值得一提的是你的SQL條件是錯誤的。你的方式有它設置,「10」的$開始值傳遞給該文件將創建查詢:

$sql="SELECT * 
FROM `tablename` 
WHERE `Type` LIKE '$var1' 
LIMIT 10 , 40"; 

哪個抓住40分的結果,從結果10日開始, 10之間的結果和40;一個常見的誤解。

雖然我假設這是代碼的減少版本,但對於進入查詢的外部任何內容,總是值得使用* mysql_real_escape_string()*。人們可以很容易地把$起始值「; DROP TABLE tablename;」,讓您查詢:

$sql="SELECT * 
FROM `tablename` 
WHERE `Type` LIKE '$var1' 
LIMIT ; DROP TABLE `tablename`;"; 

,我相信你不想:P

0

您可以使用SQL_CALC_FOUND_ROWS因爲這沒有考慮LIMIT條款。然後您可以使用SELECT FOUND_ROWS()來檢索該值。這樣,您始終可以在原始查詢的同時獲取計數,並避免任何併發問題。

做到這一點的另一種方法是總是試着獲得下一個結果。因此,即使您只顯示30行,也總是嘗試檢索31行。然後,您可以檢查第31行,如果存在,您知道還有另一個頁面要顯示。