[英]How do I fetch the last record in a MySQL database table using PHP?
我想用PHP獲取MySQL數據庫表中的最后一個結果。 我該怎么做呢?
我在表中有2列,MessageID(自動)和消息。
我已經知道如何連接數據庫了。
使用mysql_query :
<?php
$result = mysql_query('SELECT t.messageid, t.message
FROM TABLE t
ORDER BY t.messageid DESC
LIMIT 1') or die('Invalid query: ' . mysql_error());
//print values to screen
while ($row = mysql_fetch_assoc($result)) {
echo $row['messageid'];
echo $row['message'];
}
// Free the resources associated with the result set
// This is done automatically at the end of the script
mysql_free_result($result);
?>
SQL查詢:
SELECT t.messageid, t.message
FROM TABLE t
ORDER BY t.messageid DESC
LIMIT 1
...使用ORDER BY設置值,因此最高值是結果集中的第一行。 LIMIT表示所有這些行中只有第一行實際返回結果集。 因為messageid
是自動遞增的,所以最高值是最近的值...
關系數據庫中的記錄沒有內在的“順序”,因此如果沒有某種ORDER BY
子句,則無法獲取“最后”記錄。
因此,為了獲取“最后”記錄,只需反轉ORDER BY
子句(將ASC
更改為DESC
,反之亦然),然后選擇第一個結果。
如果你有一個自動增量字段,你只想找到插入的最后一個值,你可以使用自動增量字段不斷增加的事實(因此“最后一個”將是最高的那個)價值)並做這樣的事情:
SELECT *
FROM my_table
ORDER BY id_field DESC
LIMIT 1
當然,您可以通過在查詢中排序DESC來選擇最后一行。 但是,如果要選擇第一行然后選擇最后一行,該怎么辦? 您可以運行新查詢,但也可以使用mysql_data_seek函數。 檢查以下代碼:
$result = mysql_query('YOUR QUERY') or die('Invalid query: ' . mysql_error());
$row_first = mysql_fetch_array($result);
mysql_data_seek($result , (mysql_num_rows($result)-1));
$row_last = mysql_fetch_array($result);
希望這可以幫助
MySql查詢看起來像這樣:
select MessageID, Message
from Table
order by MessageID desc
limit 1;
我對PHP太生疏了,無法為您提供正確的語法來執行此操作。
此查詢有效,因為您有一個自動遞增標識字段( MessageID
)。 通過按降序(從最大到最小)順序按字段排序結果,我們有效地以相反的順序返回表中的記錄。 limit 1
子句只是將結果集限制為一條記錄 - 表中的最后一條記錄。
這段PHP的代碼工作得很好
SELECT t.messageid, t.message
FROM TABLE t
ORDER BY t.messageid DESC
LIMIT 1
如果你沒有並發條目進入某個table.b'因為並發條目可能不符合它們的插入順序。
出於某種原因(我不知道為什么),我的老板強迫我以這種方式獲取數據:
$message_arr = array();
while ($row = mysql_fetch_assoc($result)) {
$message_arr['messageid']= $row['messageid'];
$message_arr['message']= $row['message'];
}
return $message_arr;
當然,你需要OMG小馬的答案,我只是告訴你另一種方法=)
我希望這有幫助。
您應該使用SELECT查詢。 SELECT如何工作。
SELECT * FROM table
- 選擇SELECT * FROM table
所有內容(id,第1行,第2行,...) SELECT id FROM table
- 僅從SELECT id FROM table
選擇特定行。
如果您現在知道如何選擇,則可以使用其他邏輯。
SELECT * FROM table ORDER by id DESC LIMIT 1;
從表格中選擇所有內容,按ID排序 - 將其命令為DESCENDING並將查詢限制為僅一個結果。
如果你這樣做:
SELECT * FROM table ORDER by id ASC limit 1;
- 你將獲得1個數據庫入口。
您可以按任意行訂購。
希望能幫助到你。
你最后的結果是什么意思? 你需要更精確一點。
你的意思是“我注冊的最后一個條目”?
在這種情況下,您應該使用適當的方法(取決於您使用的擴展名)mysqli-> insert_id或mysql_insert_id。
如果您的意思是“表中的最新條目”,那么像Andrew Hare這樣的SQL查詢就是您所需要的。
你的意思是最后一條記錄還是你需要最近插入記錄的id? 為此,您將使用PHP mysql_insert_id()
函數。 或者,如果您使用的是myusqli擴展,請使用$ mysqli-> insert_id。
需要記住的一點是,數據不會以任何MYSQL數據庫的插入順序保存。 因此,為了獲得最后輸入的記錄,您必須具有自動增量字段。 由於此表中有一個自動增量字段,我們很高興。
以下腳本將有助於獲取最后輸入的記錄
<?php
$sql = "SELECT * FROM table_name ORDER BY MessageID DESC LIMIT 2";
$result_set = mysql_query($sql);
if($result_set){
while($row = mysql_fetch_array($result_set)) {
echo "Message Id: ".$row['MessageID']."<br>";
echo "Message: ".$row['Message']."<br>";
}
//creating alert
echo "<script type=\"text/javascript\">alert('Data was Retrieved
successfully');</script>";
}
else{
//creating alert
echo "<script type=\"text/javascript\">alert('ERROR! Could Not Retrieve
Data');</script>";
}
?>
查詢選擇表中的所有記錄,並根據MessageID的降序(因為它是自動增量字段)對它們進行排序,並將返回的結果限制為僅一個記錄。 因此,由於表是按照MessageID的降序排序的,所以只返回最后輸入的記錄。
注意:如果您使用的是較新版本,則必須使用mysqli_query($ connection_variable,$ sql); 而不是mysql_query($ sql); 和
mysqli_fetch_array($ result_set)而不是mysql_fetch_array($ result_set)
$result = mysql_query('select max(id) from your_table ') or die('Invalid query: ' . mysql_error());
while ($row = mysql_fetch_assoc($result)) {
echo $row['id'];
echo $row['message'];
}
//
//
mysql_free_result($result);
很簡單
$statement = $PDO->prepare("
SELECT MessageID,
Message
FROM myTable
ORDER BY MessageID DESC
LIMIT 1;
");
$statement->execute();
$result = $statement->fetch(\PDO::FETCH_ASSOC);
echo $result['MessageID']." and ".$result['Message'];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.