Как получить последнюю запись в таблице базы данных MySQL с помощью PHP?

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

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

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

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

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

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

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

 SELECT * FROM my_table ORDER BY id_field DESC LIMIT 1 

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

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

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

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

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

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

Что вы подразумеваете под «последним результатом»? Вам нужно уточнить немного больше.

Вы имеете в виду «последнюю запись, которую я зарегистрировал»?

В этом случае вы должны использовать соответствующий метод (в зависимости от используемого расширения) mysqli-> insert_id ИЛИ mysql_insert_id.

Если вы имеете в виду «последнюю запись в таблице», SQL-запрос, такой как Andrew Hare's, – это именно то, что вам нужно.

Вы имеете в виду последнюю запись или вам нужен идентификатор последней вставленной записи? Для этого вы должны использовать mysql_insert_id() PHP. Или, если вы используете расширение myusqli, используйте $ mysqli-> insert_id.

этот код php работает отлично

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

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

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

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

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

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

Вы должны использовать запрос 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>"; } ?> 

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

ПРИМЕЧАНИЕ. Если вы используете более новую версию, вам нужно будет использовать mysqli_query ($ connection_variable, $ sql); вместо mysql_query ($ sql); а также
mysqli_fetch_array ($ result_set) вместо mysql_fetch_array ($ result_set)