2013-11-22 65 views
0

我在PHP中運行while循環從mysql數據庫中選擇數據。我怎樣才能找出最後一個記錄是什麼,PHP/SQL查詢查找最後結果

例如:

$sql="SELECT * from table1 "; 
$rs=mysql_query($sql,$conn); 
while($result=mysql_fetch_array($rs)) 
{ 
echo $result["col1"].' - '.$result["col2"].'<br>'; 
} 

那麼當它到達我想要顯示的最後一個記錄是這樣的:

echo 'Last Record: '.$result["col1"].' - '.$result["col2"].'<br>'; 
+2

使用mysql_num_rows()來確定返回的行數,然後在循環中計數,直到獲得最後一行爲止 –

+2

如何定義最後一行?最後插入?最後一個ID?只是上次回想起來? – idmean

回答

2

你基本上需要記錄你有多少行,然後建立一個計數器。你可以做,使用mysql_num_rows()

$sql="SELECT * from table1"; 
$rs = mysql_query($sql,$conn); 
$numRows = mysql_num_rows($rs); 

$i = 1; 
while($result=mysql_fetch_array($rs)) 
{ 
    echo ($i == $numRows) ? 'Last Record: '.$result["col1"].' - '.$result["col2"].'<br />' : $result["col1"].' - '.$result["col2"].'<br />'; 
    $i++; 
} 

你應該注意到,雖然該mysql_*()家庭的功能,現在已經過時了。爲了安全和長壽,你真的應該使用MySQLiPDO

+0

是的。每行包含'mysql_query'的代碼只是一行代碼,當函數從PHP中刪除時,您將不得不再次刪除代碼。 – tadman

0

你可以簡單地使用sql查詢本身來獲取最後一個值,根據你想要的任何順序(或者只使用DESC來獲得自然順序的底部):

SELECT * FROM table1 
ORDER BY your_column DESC 
LIMIT 1; 

編輯:既然你正在尋找的最後一排,你可以用mysql_num_rows

$numrows = mysql_num_rows($rs); 
$i = 1; 
// in while loop... 
    if ($i === $numrows) { 
     // print last result 
    } else { 
     // print normal result 
    } 
    $i++; 
// end while loop 

本質檢查,你想爲你,然後當寫的行數是相同的記錄計數器作爲你所在的行號(例如,最後一個)

+0

我如何停止顯示兩次的最後一條記錄?顯然,如果我運行我的while循環與所有記錄它將顯示最後一條記錄,然後第二個查詢 – charlie

+0

不會回答問題(如果您閱讀標題之外)。他想要顯示所有結果,但以不同的方式顯示最後一條記錄。 – OGHaza

+0

@OGHaza啊,更新 – Rogue

1

獲取返回的行總數,並檢查使用標誌變量的循環迭代和循環檢查標誌==總行

$t=mysql_num_row($rs); 
$i=0; 
while($result=mysql_fetch_array($rs)) 
{ 
$i++; 

if($t == $i){ 
echo "Last Record "; 
} 
echo $result["col1"].' - '.$result["col2"].'<br>'; 
} 

mysql_num_rows

0
$sql="SELECT * from table1 "; 
$rs=mysql_query($sql,$conn); 
$num_rows = mysql_num_rows ($rs); 

for ($i=0; $i < $num_rows; $i++) { 
    $result=mysql_fetch_array($rs); 
    if ($i == ($num_rows - 1)) { 
     echo 'Last Record: '.$result["col1"].' - '.$result["col2"].'<br>'; 
    } else { 
     echo $result["col1"].' - '.$result["col2"].'<br>'; 
    } 
} 
0

面向未來的這個程序做它的 「硬辦法」:

while ($next_row = fetch_row(...)) { 
    if ($prev_row) { do_output($prev_row); } 
    $prev_row = $next_row; 
} 
if ($prev_row) { do_output($prev_row, FLAG_IS_LAST_ROW); } 

爲什麼?未來的維護可能會使得mysql_num_rows()不可靠,要麼是因爲結果集太大,要麼是因爲要與各種SQL後端進行接口。

默認情況下,MySQL客戶端庫將整個結果集拉入內存 - 這就是它如何知道SELECT行數而無需計數提取。對於小型結果集來說,這種行爲相當方便,但對於大型結果集來說卻是破壞性的。這是用戶可配置的。 (這些選項通常被命名爲「store_result v。use_result」或「buffered v。unbuffered」。)

此外,大多數RDBMS接口並未事先知道結果集的大小。如果你想以某種可重用的方式與這些接口連接,你需要改變你的方法。