简体   繁体   中英

How do I fetch the last record in a MySQL database table using PHP?

I want to fetch the last result in MySQL database table using PHP. How would I go about doing this?

I have 2 Columns in the Table, MessageID(auto) & Message.

I already know how to connect to the database.

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

?>

The SQL query:

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

...uses the ORDER BY to set the values so the highest value is the first row in the resultset. The LIMIT says that of all those rows, only the first is actually returned in the resultset. Because messageid is auto-increment, the highest value is the most recent one...

Records in a relational database do not have an intrinsic "order" so you cannot fetch the "last" record without some kind of ORDER BY clause.

Therefore, in order to fetch the "last" record, simply reverse the ORDER BY clause (change ASC to DESC or vice versa) then select the first result.

If you have an auto-increment field and you just want to find the last value that was inserted, you can use the fact that the auto-increment fields are ever-increasing (therefore the "last" one will be the one with the highest value) and do something like this:

SELECT *
FROM my_table
ORDER BY id_field DESC
LIMIT 1

Of course you can select the last row by sorting DESC in your query. But what if you want to select the first row and then the last. You can run a new query, but you can also use the function mysql_data_seek . check code below:

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

Hope this helps

The MySql query would look like this:

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

I am too rusty with PHP to give you the right syntax for executing this.

This query works because you have an auto-incrementing identifying field ( MessageID ). By ordering the results by that field in descending (largest to smallest) order we are effectively returning the records in the table in reverse order. The limit 1 clause simply limits the result set to one record - the last one in the table.

this code of php works fine

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

if you don't have concurrent entries going into some table.b'cause concurrent entries may not go in accordance of their insertion order.

for some reason (which I don't know why), my boss force me to get the data in this way:

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

}
return $message_arr;

Of course, you need everything from OMG Ponies's answer I'm just telling you another way to do it =)

I hope this help.

You should use SELECT query. How SELECT works.

SELECT * FROM table - selects everything in a table (id, row 1, row 2,...) SELECT id FROM table - selects only particular row from table.

If you now know, how to select, you can use additional logic.

SELECT * FROM table ORDER by id DESC LIMIT 1;

selects everything from table table, orders it by id - orders it DESCENDING and limits the query to only one result.

If you would do it like this:

SELECT * FROM table ORDER by id ASC limit 1; - you would get 1 entry into database.

You can order it by any row you want.

Hope it helps.

What do you mean by "the last result"? You need to precise a bit more.

Do you mean "the last entry I registered"?

In this case you should use the appropriate method (depending on the extension you are using) mysqli->insert_id OR mysql_insert_id.

If you mean "the latest entry in the table", an SQL query such as Andrew Hare's is just what you need.

Do you mean the last record or do you need the id of the most recently inserted record? For that you would use the PHP mysql_insert_id() function. Or if you are using the myusqli extension use $mysqli->insert_id.

One thing to remember is that data does not get saved in the insertion order in any MYSQL database. So in order to get the last entered record u will have to have an auto increment field. Since there is an auto increment field in this table we are good to go.

The below script will help to get the last entered record

<?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>";
     }
?>

The query selects all the records in the table and orders them according to the descending order of the MessageID (as it is the auto increment field) and limits the returned result to only one record. So since the table is ordered according to the descending order of the MessageID only the last entered record will be returned.

NOTE: if you are using a newer version you will have to use mysqli_query($connection_variable,$sql); instead of mysql_query($sql); and
mysqli_fetch_array($result_set) instead of 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);

simple like that

$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'];

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM