簡體   English   中英

如何使用PHP獲取MySQL數據庫表中的最后一條記錄?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM