2009-01-09 84 views
3

說我有這個使用單行查詢與MySQL和PHP

$result = mysql_query('SELECT views FROM post ORDER BY views ASC'); 

,我想用在指數30我假設的價值,我會用

mysql_data_seek($result, 30); 
$useableResult = mysql_fetch_row($result); 
echo $useableResult . '<br/>'; 

但是,這是我回整表

我有什麼問題?

編輯:Woops,其實我有

mysql_data_seek($result, 30); 
while($row = mysql_fetch_row($result)){ 
    echo $row['views'] . '<br/>'; 
} 

回答

5

WHERE子句只需使用一個SQL。

$result = mysql_query('SELECT views FROM post WHERE ID=30') 

如果你不想通過ID去,而是想將退還您可以使用LIMIT分鐘30項,最大:

$result = mysql_query('SELECT views FROM post LIMIT 30, 1') 

在這兩種情況下,你的ORDER BY命令變得不必要。

這是一個good usage example of the LIMIT command用於在大型記錄集上進行分頁。

+0

乾杯,我實際上在我自己的代碼中有一個錯誤,這並沒有確定它,但它仍然有用。 :)這裏 – Supernovah 2009-01-09 06:31:32

+0

的樣本是錯誤的: SELECT * FROM`your_table` LIMIT 5,5 這將顯示記錄6,7,8,9,和10 檢查夏蘭McNulty的答案 – Riho 2009-01-09 09:01:17

0

您確定$ result中有30個元素嗎?您可能想檢查30> mysql_num_rows()。

+0

我的示例數據庫有50000元 – Supernovah 2009-01-09 06:33:46

2

你的第一個例子實際上會做你想要的,但是會非常昂貴。第二種是選擇整個表格,移動到結果的第30行,然後循環遍歷所有結果。

而應該做到以下幾點,這將只返回一個行是快了很多:

$result = mysql_query('SELECT views FROM post ORDER BY views ASC LIMIT 30,1'); 

注意,LIMIT的Soviut的解釋是不太正確的 - 它(偏移,行數),而比(最小,最大)。