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

问题描述:

我想使用PHP获取MySQL数据库表中的最后结果。我会如何去做这件事?如何使用PHP获取MySQL数据库表中的最后一条记录?

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

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

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

+0

这是完美的,谢谢! – ritch 2010-08-05 01:37:03

+1

请注意,这种方法并不能保证你要读取的行是你刚刚插入的行(例如在同一个脚本中),例如在多次并发插入的情况下。 – 2010-08-16 02:11:45

MySQL查询应该是这样的:

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

我用PHP太生疏给你正确的语法执行此操作。

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

关系数据库中的记录没有固有的“顺序”,所以如果没有某种ORDER BY子句,就无法获取“最后”记录。

因此,为了获取的“最后”的记录,简单地反转ORDER BY条款(变化ASCDESC或反之亦然),然后选择第一结果。

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

SELECT * 
FROM my_table 
ORDER BY id_field DESC 
LIMIT 1 

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

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

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

如果您的意思是“表格中的最新条目”,则像Andrew Hare's这样的SQL查询就是您所需要的。

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

+0

表中的最后一条记录,即表中的20条消息,提取消息20。 – ritch 2010-08-05 01:32:25

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

希望这有助于

PHP的这个代码工作正常

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

如果没有并发条目进入一些table.b'cause并发条目可能不会按照其插入顺序进行。

出于某种原因(我不知道为什么),我的老板逼我得到这样的数据:

$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 - 选择表中的所有内容(id,row 1,row 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个进入数据库。

您可以按您想要的任意一行进行订购。

希望它有帮助。

有一点要记住的是,数据不会得到保存在插入顺序在任何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>"; 
    } 
?> 

查询选择表中的所有记录,并命令他们4。按照邮件ID从高到低的顺序(因为它是自动增加字段)并将返回的结果限制为仅一条记录。因此,由于表格按照MessageID的降序排列,所以只返回最后输入的记录。

注:如果您使用的是较新的版本,你将不得不使用mysqli_query($ connection_variable,$ SQL);而不是mysql_query($ sql);
mysqli_fetch_array($ result_set)代替mysql_fetch_array($ result_set)