LINUX.ORG.RU
решено ФорумAdmin

как выбрать последние х строк в базе

 


0

2

и снова здравствуйте!

казалось бы «order by field desc» могбы решить проблему, ноо нужно универсальное средство, подходящее для любой таблицы, а поле field в разных таблицах может называться id, id_game, number И тд.

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

что можете порекомендовать?

в целом запрос будет исполняться из perl скрипта, но думаю это без разницы откуда именно он будет выполняться.

пока видится следующий вариант

1) делаем select count(*) from table
2) пишем вывод в переменную
3) отнимаем от переменно Х значений
3) делаем select * from table limit переменная, значение_которое_отнимали.

но както костыльно на мой взгляд

diakon2
() автор топика
Ответ на: комментарий от diakon2

никто тебе не гарантирует что те записи которые ты вставил insert будут последние в след select.

Не занимайся ерундой.

Jopich1
()
Ответ на: комментарий от targitaj

не наблюдается одного универсального решения

Видимо, предполагается, что в наборе данных, для которых критична хронология, присутствует маркер с датой.

kravzo ★★
()

— Доктор, когда делаю так (скрючивается в немыслимой позе), у меня вот тут сильно болит.
— А вы так не делайте.
(q)

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

bormant ★★★★★
()
Ответ на: комментарий от nikolnik

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

или я чтото нетак понял? ведь в разных таблицах может быть разное количество записей

diakon2
() автор топика
Ответ на: комментарий от anc

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

идея была дать в count(*) потом из большего вычесть меньшее и сделать селект по последним записям в первую базу и заинсертить их во вторую. НО яже не знаю сколько будет записей на данный момент в базах, сам вижу вариант описаный во втором посте, но мне он кажется костыльным, по этому решил спросить, может есть какойто оператор который делает тоже что и LIMIT  но не вперед, от первой или какогото определенной строки а наоборот, от последней и назад

order by desc\asc не прокатит так как я разных базах\таблицах, на которых будет натравливаться скрипт все поля будут называться всегда по разному

diakon2
() автор топика
Ответ на: комментарий от diakon2

может есть какойто оператор который делает тоже что и LIMIT но не вперед, от первой или какогото определенной строки а наоборот, от последней и назад

Тебе же уже сказали, что в СУБД нет такого понятия, как последовательность строк. Без сортировки ты тут ничего не сделаешь. Обычно сортировка делается по первичному ключу, так что в теории ты можешь выдрать из базы все записи, загнать их в массив, а дальше уже как удобнее (и какой язык используется) — либо брать N элементов с конца, либо делать реверс и брать N первых. Но это полная херня, потому что порядок записей тебе никто не гарантирует, да и тормозить будет, если данных много.

WereFox ★☆
()

ну да, sql не оперирует такой сущностью как «номер строки в таблице», обломись

af5 ★★★★★
()
Ответ на: комментарий от Jopich1

спасибо вам и всем остальным ответившим, все ясно, что дальше делать тоже ясно.

diakon2
() автор топика
Ответ на: комментарий от diakon2

У вас только insert ? update не предусмотрен?

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.