С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/44: Рейтинг темы: голосов - 44, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 18.10.2011
Сообщений: 30

Как узнать последнюю запись в таблице по id

13.06.2012, 13:12. Показов 9446. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем задача такая: Когда в таблицу добавляется новая запись, должна проверяться добавилась ли она. Решил сделать так, узнать последнюю запись в таблице до добавлении записи и потом проверить увеличились ли записи на 1.

PHP
1
2
3
4
5
6
7
8
9
$sql = mysql_query("SELECT id from table");
$kol_id_old = mysql_fetch_array($sql);
 
mysql_query("INSERT INTO table ...<тут короче данные>...");
 
$sql = mysql_query("SELECT id from table");
$kol_id_new = mysql_fetch_array($sql);
 
if($kol_id_new == $kol_id_old + 1) echo "Запись успешно добавлена!";
но тут уже на второй строчке выводится ошибка "Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource".
Как сделать чтобы работало по назначению?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.06.2012, 13:12
Ответы с готовыми решениями:

Узнать какой ID получила запись в таблице
Вообщем есть запрос: $query = &quot;INSERT INTO `phpbb ... бла бла бла как узнать какой ID ей присвоился? Автоматически? Имеется ввиду...

Как обновить последнюю запись в таблице
сабж, пробую так: &quot;UPDATE USER SET name='&quot; + name+ &quot;' WHERE id=(SELECT TOP(1) FROM USER)&quot;) Добавлено через 43 минуты ...

Как найти последнюю запись в таблице?
Не могу найти последнюю запись в таблице. Вот один из вариантов как искал: Dim etomoja As Variant etomoja...

11
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
13.06.2012, 13:38
Цитата Сообщение от Sikak
В общем задача такая: Когда в таблицу добавляется новая запись, должна проверяться добавилась ли она. Решил сделать так, узнать последнюю запись в таблице до добавлении записи и потом проверить увеличились ли записи на 1.
Зачем такие страсти? Запись может не добавится только в случае ошибки, но тогда сервер выдаст эту ошибку на клиента. А твоя задача только эту ошибку обработать.
0
0 / 0 / 0
Регистрация: 18.10.2011
Сообщений: 30
13.06.2012, 13:44  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
Зачем такие страсти? Запись может не добавится только в случае ошибки, но тогда сервер выдаст эту ошибку на клиента. А твоя задача только эту ошибку обработать.
Ну вот такие у меня страсти. Если можно напишите как узнать номер id последней записи в таблице.
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
13.06.2012, 13:51
http://www.php.net/manual/ru/f... ert-id.php
0
0 / 0 / 0
Регистрация: 18.10.2011
Сообщений: 30
13.06.2012, 13:58  [ТС]
Цитата Сообщение от ostgals Посмотреть сообщение
про mysql_insert_id читал, по описанию он возвращает id добавленной записи, а как мне узнать id записи до того как добавилась новая запись?
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
13.06.2012, 14:11
Не проверяют так.
Если два пользователя примрено в одно время откроют страницу вашего сайта, то вы можете получить не верные результаты.
Может выполнится вставка одним кодом, а другим нет, но проверка ID до вставки в обоих скриптах будет одна, а после вставки в обоих скриптах может увеличится на 1. Так как один из скрпитов вставил запись.

если вы выполняете командду insert, тогда в случае если запись не добавилась вы получите результат false.

PHP
1
2
3
4
5
6
7
8
if (mysql_query("insert..."))
{
    //запись добавилась
    // тут можно получить последний вставленый id
    $last_id = mysql_insert_id();
}
else
   // запись не добавилась
0
0 / 0 / 0
Регистрация: 18.10.2011
Сообщений: 30
13.06.2012, 14:19  [ТС]
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Не проверяют так.
Если два пользователя примрено в одно время откроют страницу вашего сайта, то вы можете получить не верные результаты.
Может выполнится вставка одним кодом, а другим нет, но проверка ID до вставки в обоих скриптах будет одна, а после вставки в обоих скриптах может увеличится на 1. Так как один из скрпитов вставил запись.

если вы выполняете командду insert, тогда в случае если запись не добавилась вы получите результат false.

PHP
1
2
3
4
5
6
7
8
if (mysql_query("insert..."))
{
    //запись добавилась
    // тут можно получить последний вставленый id
    $last_id = mysql_insert_id();
}
else
   // запись не добавилась
Спасибо за ответ. Над таким подходом я думал, это запасной вариант, в случае если не смогу реализовать вышенаписанное.
Записи в базу будет добавлять только один пользователь, так что результаты не искажаются.
Ну ладно, задам вопрос по другому. Нажимаю на кнопку и скрипт должен вывести сколько записей в БД и все (при этом скрипт никаких записей не добавляет, должен только считать кол-во записей).
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
13.06.2012, 14:31
Цитата Сообщение от Sikak Посмотреть сообщение
я думал, это запасной вариант
Запасным вариантом можно назвать когда что то сложнее или более не правильно чем основной.
У вас же на оборот, то что вы пытаетесь сделать, сложнее, в 3 раза больше запросов, и более не правильно будет работать. То что вы делаете, называется "костылём" когда оно вроде и помогает реализовать что нужно, но кривым кодом и возможно работающим с ошибками в некоторых ситуациях.

Цитата Сообщение от Sikak Посмотреть сообщение
вывести сколько записей в БД
Сколько записей в бд, и какой максимальный ID - это совершенно разные вещи. Нет не какой гарантии что не будет не одного ID пропущено в дальнейшем.

Назовите хоть одну причину использования того кода что вы хотите вместо того кода который используют все?


PHP
1
2
3
4
5
6
7
8
9
10
11
12
$sql = mysql_query("SELECT count(id) from table");
$kol_id_old = mysql_result($sql, 0);
 
mysql_query("INSERT INTO table ...<тут короче данные>...");
 
$sql = mysql_query("SELECT count(id) from table");
$kol_id_new = mysql_result($sql, 0);
 
if($kol_id_new == $kol_id_old + 1)
{
    echo "ВОЗМОЖНО! Запись успешно добавлена!";
}
PHP
1
2
if (mysql_query("INSERT INTO table ...<тут короче данные>..."))
    echo "Запись успешно добавлена!";
Сравните два кода, вы в серёз считаете что первый код правильней? Он и больше, и может сработать с ошибкой. И в несколько раз больше нагрузки на бд.

Добавлено через 1 минуту
А так же можно определить сколько было вставлено записей с помощью mysql_affected_rows
0
0 / 0 / 0
Регистрация: 18.10.2011
Сообщений: 30
13.06.2012, 14:55  [ТС]
Я имел ввиду, уже знаю что можно реализовать со 2-вариантом. Мне стало интересно как сделать это по другому. Что тут плохого если мне хочется узнать другие варианты?

И кстати, в первом варианте может и считает сколько записей, но каким переменным его выводить на экран?
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
13.06.2012, 15:07
Цитата Сообщение от Sikak Посмотреть сообщение
Что тут плохого если мне хочется узнать другие варианты?
Самое плохое тут только одно. Этот вариант не правильный. И если вы напишите такой вариант где то на сайте, это будет означать что вы не понимаете что он с ошибкой, а это значит что рано писать сайт


Цитата Сообщение от Sikak Посмотреть сообщение
но каким переменным его выводить на экран?
А в коде вы не видите как получается переменная?)
PHP
1
$kol_id_old = mysql_result($sql, 0);
Ну и почитайте про псевдонимы полей и таблиц в mysql
PHP
1
$sql = mysql_query("SELECT count(id) as `c` from table");
у вас будет поле подписано как c
0
0 / 0 / 0
Регистрация: 18.10.2011
Сообщений: 30
13.06.2012, 15:15  [ТС]
Если не в таких ситуациях, то в других все равно понадобится такие подходы. А то что Я спрашивал каким переменным выводить, потому что "корректированный" вами код работает с ошибкой и не выводит кол-во записей.

Вы мне ответьте только на один вопрос: как считать сколько записей в таблице?
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
13.06.2012, 15:17
http://www.mysql.ru/docs/man/Counting_rows.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.06.2012, 15:17
Помогаю со студенческими работами здесь

Как определить последнюю запись в таблице данных?
Программа выводит данные в EXCEL в табличном виде. Новая запись появляется в случайный момент времени и записывается в стоке,...

Показать последнюю запись в таблице
Доброго времени суток. Стоит такая задача: Есть ленточная форма Список заказов необходимо при открытии этой формы получить следующее:...

Установить курсор на последнюю запись в таблице
Добрый день. у меня на форме есть подчиненная форма в которой из запроса формируется таблица. подскажите пожалуйста как установить курсор...

ADOTable+access получить последнюю запись в таблице
Собственно есть таблица, в ней есть счетчик, как мне получить последнее значение счетчика?

Узнать что запись ей в другой таблице
Как можно узнать, что запись в поле telephone содержится в поле FullTel в таблице users? Добавлено через 10 минут Попробовал так: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru