Как получить последнюю запись в таблице базы данных MySQL с помощью PHP? - PullRequest
6 голосов
/ 05 августа 2010

Я хочу получить последний результат в таблице базы данных MySQL, используя PHP. Как бы я поступил так?

У меня есть 2 столбца в таблице, MessageID (авто) и сообщение.

Я уже знаю, как подключиться к базе данных.

Ответы [ 12 ]

14 голосов
/ 05 августа 2010

Использование 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 является автоинкрементом, самое высокое значение является самым последним ...

4 голосов
/ 05 августа 2010

Записи в реляционной базе данных не имеют встроенного «порядка», поэтому вы не можете получить «последнюю» запись без какого-либо условия ORDER BY.

Поэтому, чтобы получить «последний»запись, просто измените предложение ORDER BY (измените ASC на DESC или наоборот), затем выберите результат first .

Если у вас есть поле с автоинкрементом и выпросто хотите найти последнее значение, которое было вставлено, вы можете использовать тот факт, что поля автоинкремента постоянно увеличиваются (поэтому «последним» будет поле с наибольшим значением) и сделать что-то вроде этого:

SELECT *
FROM my_table
ORDER BY id_field DESC
LIMIT 1
2 голосов
/ 24 апреля 2012

Конечно, вы можете выбрать последнюю строку, отсортировав 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);

Надеюсь, это поможет

1 голос
/ 05 августа 2010

Запрос MySql будет выглядеть так:

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

Я слишком разбираюсь в PHP, чтобы дать вам правильный синтаксис для выполнения этого.

Этот запрос работает, потому что у вас есть идентифицирующее поле с автоинкрементом (MessageID). Упорядочивая результаты по этому полю в порядке убывания (от наибольшего к наименьшему), мы фактически возвращаем записи в таблице в обратном порядке. Предложение limit 1 просто ограничивает набор результатов одной записью - последней в таблице.

0 голосов
/ 16 августа 2018
$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'];
0 голосов
/ 16 августа 2018
$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);

просто так

0 голосов
/ 02 декабря 2017

Следует помнить, что данные не сохраняются в порядке вставки в любой базе данных 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)

0 голосов
/ 18 ноября 2015

Вы должны использовать запрос SELECT. Как работает SELECT.

SELECT * FROM table - выбирает все в таблице (id, строка 1, строка 2, ...) SELECT id FROM table - выбирает только определенную строку из таблицы.

Если вы теперь знаете, как выбирать, вы можете использовать дополнительную логику.

SELECT * FROM table ORDER by id DESC LIMIT 1;

выбирает все из таблицы, упорядочивает по id - упорядочивает по убыванию и ограничивает запрос только одним результатом

Если бы вы сделали это так:

SELECT * FROM table ORDER by id ASC limit 1; - вы получите 1 запись в базе данных.

Вы можете заказать его по любому желаемому ряду.

Надеюсь, это поможет.

0 голосов
/ 12 сентября 2015

по какой-то причине (что я не знаю почему), мой босс заставил меня получить данные таким образом:

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

}
return $message_arr;

Конечно, вам нужно все от OMG Ponies's ответ Я просто говорю вам другой способ сделать это =)

Я надеюсь, что это поможет.

0 голосов
/ 17 сентября 2014

этот код php работает нормально

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

, если у вас нет одновременных записей, входящих в какую-либо таблицу. B, потому что параллельные записи могут не соответствовать их порядку вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...