【问题标题】:How do I fetch the last record in a MySQL database table using PHP?如何使用 PHP 获取 MySQL 数据库表中的最后一条记录?
【发布时间】:2010-08-05 01:17:30
【问题描述】:

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

我在表中有 2 列,MessageID(auto) 和 Message。

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

【问题讨论】:

    标签: php mysql database


    【解决方案1】:

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

    【讨论】:

    • 请注意,此方法不能保证您将获取的行是您刚刚插入的行(即在同一个脚本中),例如在多个并发插入的情况下。
    【解决方案2】:

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

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

    如果您有一个自动增量字段并且您只想找到最后插入的值,您可以使用自动增量字段不断增加的事实(因此“最后一个”字段将是那个具有最高值)并执行以下操作:

    SELECT *
    FROM my_table
    ORDER BY id_field DESC
    LIMIT 1
    

    【讨论】:

      【解决方案3】:

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

      希望对你有帮助

      【讨论】:

        【解决方案4】:

        MySql 查询如下所示:

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

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

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

        【讨论】:

          【解决方案5】:

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

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

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

          如果您的意思是“表中的最新条目”,那么像 Andrew Hare 这样的 SQL 查询正是您所需要的。

          【讨论】:

            【解决方案6】:

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

            【讨论】:

            • 表中最后一条记录,即表中20条消息,取20条消息。
            【解决方案7】:

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

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

            当然,您需要 OMG Ponies 的回答中的所有内容,我只是告诉您另一种方法 =)

            希望对你有所帮助。

            【讨论】:

              【解决方案8】:

              您应该使用 SELECT 查询。 SELECT 的工作原理。

              SELECT * FROM table - 选择表中的所有内容(id,第 1 行,第 2 行,...) SELECT id FROM table - 从表中只选择特定的行。

              如果您现在知道如何选择,您可以使用额外的逻辑。

              SELECT * FROM table ORDER by id DESC LIMIT 1;
              

              从表 table 中选择所有内容,按 id 排序 - 按 DESCENDING 排序并将查询限制为仅一个结果。

              如果你愿意这样做:

              SELECT * FROM table ORDER by id ASC limit 1; - 您将获得 1 个进入数据库的条目。

              您可以按任意行排序。

              希望对你有帮助。

              【讨论】:

                【解决方案9】:

                要记住的一点是,数据不会插入顺序保存在任何 MYSQL 数据库中。因此,为了获得最后输入的记录,您必须有一个 auto increment 字段。由于此表中有一个自动增量字段,我们很高兴。

                以下脚本将帮助获取最后输入的记录

                <?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】:
                  $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】:

                    这段 php 代码运行良好

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

                    如果您没有并发条目进入某个表。b'因为并发条目可能不会按照它们的插入顺序进行。

                    【讨论】:

                      【解决方案12】:
                      $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'];
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2023-03-16
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2012-10-15
                        • 2019-12-28
                        • 1970-01-01
                        相关资源
                        最近更新 更多