如何使用PHP获取MySQL数据库表中的最后一条记录?

时间:2010-08-05 01:17:30

标签: php mysql database

我想使用PHP获取MySQL数据库表中的最后一个结果。我该怎么做呢?

我在表格中有2个列,MessageID(auto)&消息。

我已经知道如何连接数据库了。

12 个答案:

答案 0 :(得分:14)

使用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是自动递增的,所以最高值是最近的值...

答案 1 :(得分:4)

关系数据库中的记录没有内在的“顺序”,因此如果没有某种ORDER BY子句,您将无法获取“最后”记录。

因此,为了获取“最后”记录,只需撤消ORDER BY子句(将ASC更改为DESC,反之亦然),然后选择第一个结果。

如果你有一个自动增量字段并且你只想找到插入的最后一个值,你可以使用自动增量字段不断增加的事实(因此“最后一个”将是一个具有最高价值)并做这样的事情:

SELECT *
FROM my_table
ORDER BY id_field DESC
LIMIT 1

答案 2 :(得分:2)

当然,您可以通过在查询中对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);

希望这有帮助

答案 3 :(得分:1)

MySql查询如下所示:

select MessageID, Message
from Table
order by MessageID desc
limit 1;

我对PHP太生疏了,无法为您提供执行此操作的正确语法。

此查询有效,因为您有一个自动递增标识字段(MessageID)。通过按降序(从最大到最小)顺序按字段排序结果,我们有效地以相反的顺序返回表中的记录。 limit 1子句只是将结果集限制为一条记录 - 表中的最后一条记录。

答案 4 :(得分:0)

“最后的结果”是什么意思?你需要更精确一点。

您的意思是“我注册的最后一个条目”吗?

在这种情况下,您应该使用适当的方法(取决于您使用的扩展名)mysqli-&gt; insert_id或mysql_insert_id。

如果您的意思是“表格中的最新条目”,那么您可以使用像Andrew Hare这样的SQL查询。

答案 5 :(得分:0)

您的意思是最后一条记录还是您需要最近插入的记录的ID?为此,您将使用PHP mysql_insert_id()函数。或者,如果您使用myusqli扩展名,请使用$ mysqli-&gt; insert_id。

答案 6 :(得分:0)

这段php的代码工作正常

SELECT t.messageid, t.message 
    FROM TABLE t 
ORDER BY t.messageid DESC 
   LIMIT 1

如果你没有并发条目进入某个table.b'因为并发条目可能不符合它们的插入顺序。

答案 7 :(得分:0)

出于某种原因(我不知道为什么),我的老板强迫我以这种方式获取数据:

$message_arr = array();
while ($row = mysql_fetch_assoc($result)) {
$message_arr['messageid']= $row['messageid'];
$message_arr['message']= $row['message'];

}
return $message_arr;

当然,你需要一切来自 OMG小马的回答我只是告诉你另一种方式去做=)

我希望这有帮助。

答案 8 :(得分:0)

您应该使用SELECT查询。 SELECT如何工作。

SELECT * FROM table - 选择表格中的所有内容(id,第1行,第2行,...) 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个数据库条目。

您可以按任意行订购。

希望它有所帮助。

答案 9 :(得分:0)

要记住的一件事是,数据不会保存在任何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)

答案 10 :(得分:0)

$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);

像这样简单

答案 11 :(得分:0)

['frames:11', 'bytes:2054']
['frames:16', 'bytes:3232']