Jump to content
  • 0

Запрос к Бд на выборку последней записи...


Serjinio
 Share

Question

В таблицу в БД заносим данные ,при этом последнии данные заносятся вниз таблицы (естественно вниз не правильное выражение..,но вопрос не в этом)..как сформулировать запрос на выборку только последней внесенной записи???

Заранее спасибо за помощь

Link to comment
Share on other sites

19 answers to this question

Recommended Posts

  • 0

Ну дык если название таблицы известно, в чем проблема?

$result = mysql_query("SELECT * FROM table WHERE page='programms'",$db);
$myrow = mysql_fetch_array($result);

Понятно что * - это выбрать все поля у таблицы, table - имя таблицы, page -название одного из полей, и наконец programms - содержимое одной из ячеек. :D

Link to comment
Share on other sites

  • 0

2 Serjinio Позвольте полюбопытсвовать - зачем? может подойтет $n = mysql_insert_id();?

собственно для таблиц с auto increment есть такой книжный вариант (правда там было в другом контексте...):

SELECT * FROM cityGeoBase WHERE cityCode = (SELECT MAX(cityCode) FROM cityGeoBase);

где cityCode - есть поле auto increment;

когда же auto increment нет, то с LIMIT такое не пройдет, потому что требуется явное указание значениея. поэтому делать следует в два этапа:

SELECT COUNT(cityCode)-1 FROM cityGeoBase;
SELECT * FROM cityGeoBase LIMIT [значение count],1;

третий вариант отсортировать таблицу по убыванию и выбрать первую запись (LIMIT 1)

делать не советую, тормозит хорошо и вообще требует доп условий (того же auto increment)

http://www.mysql.ru/webboard/index.html?n1...8&n2=2&page=203

прочая информация:

http://www.mysql.ru/webboard/index.html?n1...4&n2=3&page=256

http://www.spravkaweb.ru/mysql/sql/select

http://www.kamaikin.ru/artical/sql/1/8/

http://xpoint.ru/forums/programming/theory...ead/29653.xhtml

может конечно есть и 4 и 5 и n+1 варианты. буду рад узнать

Link to comment
Share on other sites

  • 0
2 rus. это хорошо когда записей не более пары сотен, а вот когда идет пересчет на 1000 или десятки тысяч? И при 1000-5000 человек в день - что делать будете? :D

Согласен, но тогда возникает другой вопрос:

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

Тогда теряется смысл вопроса, да и суть его использования.

Может я чего не так понял?:D

Link to comment
Share on other sites

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

Это не факт что большое количество записей, говорит о частом обновлении.

тут действует (и в вашем и в моем случае) фактор вероятности в десятые-сотые-тысячные доли секунды. для мускула запрос на обновление и запрос на выборку суть равнозначны - имхо, кто первый пришел тот первым и получил, и так далее по очереди. вопрос только в том что, выбирая результат запроса mysql_fetch_array(); будет выдана первая запись и чтобы добраться до последней надо заставить мускул пройтись по всей таблице и отдать всю инфу. а это лишний траффик и нагрузка на сервер для поставленной задачи. так вот, имхо, обработав ваш запрос (или мой) MySQL продолжит обрабатывать следующие запросы. а вот будут они на выборку или обновление - это есмь великая тайна. так что шанс "пролететь" точно с последней записью есть у всех.

Link to comment
Share on other sites

  • 0
$result = mysql_query("SELECT * FROM table ORDER BY id DESC LIMIT 0, 1",$db);
$myrow = mysql_fetch_array($result);

фигня

И какой же в этом случае он выдаст id?

Скорее всего первый, а там потом в цикле нужно будет делать постраничный вывод...

Link to comment
Share on other sites

  • 0

Каким же способом определяются номера добавления ,допустим,если в таблице есть поле ID (int) которая имеет первичный ключ и автоинкремент..то понятно....)но если есть таблица с только одним полем например TEXT и не установлено ни автоинкремента ни первичного ключа ....но данные в нее записываются с 1 по последней по порядку .последовательно ..как же выбрать последнюю????

Link to comment
Share on other sites

  • 0
$result = mysql_query("SELECT * FROM table ORDER BY id DESC LIMIT 0, 1",$db);
$myrow = mysql_fetch_array($result);

фигня

И какой же в этом случае он выдаст id?

Скорее всего первый, а там потом в цикле нужно будет делать постраничный вывод...

последний конечно. я же написал что ORDER BY id DESC

Link to comment
Share on other sites

  • 0
$result = mysql_query("SELECT * FROM table ORDER BY id DESC LIMIT 0, 1",$db);
$myrow = mysql_fetch_array($result);

фигня

В смысле фигня? Это ты чей-то код процетировал, он тебе кажется фигней? Мне он на первый взгляд кажется верным.

ну в смысле это несложно. Я рад что хоть в чем-то наши мнения совпадают)

Link to comment
Share on other sites

  • 0
Каким же способом определяются номера добавления ,допустим,если в таблице есть поле ID (int) которая имеет первичный ключ и автоинкремент..то понятно....)но если есть таблица с только одним полем например TEXT и не установлено ни автоинкремента ни первичного ключа ....но данные в нее записываются с 1 по последней по порядку .последовательно ..как же выбрать последнюю????

в два этапа. первым запросом подстчитываете количество записей. вычитаете из количества один, вторым запросом выбираете с полученной позиции одну запись, используя LIMIT m,1 где m = n - 1, а n - это количество записей в таблице.

http://forum.htmlbook.ru/viewtopic.php?pid=55426#p55426

Link to comment
Share on other sites

  • 0
Каким же способом определяются номера добавления ,допустим,если в таблице есть поле ID (int) которая имеет первичный ключ и автоинкремент..то понятно....)но если есть таблица с только одним полем например TEXT и не установлено ни автоинкремента ни первичного ключа ....но данные в нее записываются с 1 по последней по порядку .последовательно ..как же выбрать последнюю????

сказано же в два этапа. первым запросом подстчитываете количество записей. вычитаете из количества один, вторым запросом выбираете с полученной позиции одну запись, используя LIMIT m,1 где m = n - 1, а n - это количество записей в таблице

тоже вариант, кстати,

$result = mysql_query("SELECT COUNT(*) as count FROM table",$db);
$myrow = mysql_fetch_row($result);

$result = mysql_query("SELECT * FROM table LIMIT {$myrow['count']}, 1",$db);

вариант для извращенцев: :)

$myrow = mysql_fetch_row(mysql_query("SELECT * FROM table LIMIT " . mysql_result( mysql_query("SELECT COUNT(*) as count FROM table",$db), 0, 'count' ) . ", 1",$db));

Link to comment
Share on other sites

  • 0
ну да - 2 этапа (у меня с 0ого элемента начинается, не гнать:))

ок. проверял? я так подозреваю что нет. count(); дает количество записей (одна, две, сто), но последний элемент будет (ноль, один, 99). так?

Link to comment
Share on other sites

  • 0

SELECT COUNT(*) FROM table

дает нам количество записей в таблице (допустим 100 записей)

SELECT * FROM table LIMIT m,n

говорит что надо выбрать n записей, начиная с записи с порядковым номером m

т.о. если из количества полученного при первом запросе не вычесть один, то второй запрос вернет ноль рядов. т.к. записи с порядковым номером 100 не существует, т.к. нумерация начинается с 0

$result = mysql_query("SELECT COUNT(*) as count FROM table",$db);
$myrow = mysql_fetch_row($result);
$result = mysql_query("SELECT * FROM table LIMIT {$myrow['count']-1}, 1",$db);

или так

$result = mysql_query("SELECT COUNT(*)-1 as count FROM table",$db);
$myrow = mysql_fetch_row($result);
$result = mysql_query("SELECT * FROM table LIMIT {$myrow['count']}, 1",$db);

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy