Я хочу получить последний результат в таблице базы данных 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)