Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: LIMIT выбрать последние записи
 
 автор: sl1p   (01.09.2008 в 23:24)   письмо автору
 
 

потерялся чтото..

как выбрать 30 последних записей например, одним запросом?

  Ответить  
 
 автор: а-я   (01.09.2008 в 23:58)   письмо автору
 
   для: sl1p   (01.09.2008 в 23:24)
 


SELECT * FROM `tbl` ORDER BY `time` DESC LIMIT 30

  Ответить  
 
 автор: sl1p   (02.09.2008 в 02:38)   письмо автору
 
   для: а-я   (01.09.2008 в 23:58)
 

эх пасибки)

  Ответить  
 
 автор: sl1p   (02.09.2008 в 07:15)   письмо автору
 
   для: sl1p   (02.09.2008 в 02:38)
 

хотя извиняюсь, не добавил в вопросе то что нужно вывести это именно ASC..

тоесть тут может надо посчитать както сколько вообще записей или х3=\

и ещё было бы круто узнать как удалять первые записи если их больше 30..
должны оставаться только последние 30.

  Ответить  
 
 автор: ronin80   (02.09.2008 в 08:46)   письмо автору
 
   для: sl1p   (02.09.2008 в 07:15)
 

>хотя извиняюсь, не добавил в вопросе то что нужно вывести это именно ASC..

SELECT * FROM

(SELECT * FROM `tbl` ORDER BY `time` DESC LIMIT 30) as table

ORDER BY table.time ASC

>и ещё было бы круто узнать как удалять первые записи если их больше 30..
>должны оставаться только последние 30.

тут я думаю нужна проверка не на уровне бд а выше (php)

  Ответить  
 
 автор: sl1p   (02.09.2008 в 09:17)   письмо автору
 
   для: ronin80   (02.09.2008 в 08:46)
 

о, это то что надо:)

>тут я думаю нужна проверка не на уровне бд а выше (php)
да ну, вроде не такой уж и сложный запрос имхо....О_о
чтото на вроде удалить там всё что ниже чегото.. немогу придумать никак) был бы айди по порядку без "пробелов" можно было бы удалить всё что меньше макс(айди)-30..
а так х3)

  Ответить  
 
 автор: ronin80   (02.09.2008 в 09:21)   письмо автору
 
   для: sl1p   (02.09.2008 в 09:17)
 

ну если там есть ключевое поле (например key) то тогда можно так

DELETE FROM `tbl`
WHERE key not in
(SELECT key FROM `tbl` ORDER BY `time` DESC LIMIT 30)

  Ответить  
 
 автор: sl1p   (02.09.2008 в 09:44)   письмо автору
 
   для: ronin80   (02.09.2008 в 09:21)
 

рыдательная ошибка какаято О_о...

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

MySQL client version: 5.0.22

это типа адски старое или как?=\

качал вроде самую новую версию easyPHP...

  Ответить  
 
 автор: ronin80   (02.09.2008 в 09:48)   письмо автору
 
   для: sl1p   (02.09.2008 в 09:44)
 

блин, у меня 5.1.11 тоже не хочет (

  Ответить  
 
 автор: sl1p   (02.09.2008 в 09:49)   письмо автору
 
   для: ronin80   (02.09.2008 в 09:48)
 

шо это за бред такой О_о...
может оно шутит)

  Ответить  
 
 автор: sl1p   (02.09.2008 в 09:52)   письмо автору
 
   для: sl1p   (02.09.2008 в 09:49)
 

мне интересно как она палит эту ошибку если версия старая а разработчики ещё не знали что они туда добавлять будут) а если знали то почему не добавили))

щас попробую новую поставить, посмотрим)

был бы рад ещё узнать что тут качать
xD
http://dev.mysql.com/downloads/mysql/5.1.html

зы. и что значит alpha версия? ато испугала маленько 6.0.6-alpha

  Ответить  
 
 автор: ronin80   (02.09.2008 в 09:57)   письмо автору
 
   для: sl1p   (02.09.2008 в 09:52)
 

в общем можно ещё такой вариант попробовать (я конечно не силён в php)

необходимо сначала подсчитать количество строк в таблице:

SELECT count(*) FROM tbl

передать это значение в переменную, а затем выполнить удаление таким образом:

DELETE FROM tbl
ORDER BY time ASC
LIMIT (вот_здесь_значение_переменной-количество_строк_которое_необходимо_оставить);

причём запрос нужно сформировать программно, чтобы на сервере посылалася запрос с подставленным значением переменной

пытался подставить вместо числа в LIMIT переменную, не хочет, так что надо формировать запрос программно

  Ответить  
 
 автор: ronin80   (02.09.2008 в 09:59)   письмо автору
 
   для: sl1p   (02.09.2008 в 09:52)
 

5.1 не рекомендую скачивать, сам намучался с ним, пришлось откатывать до 5.0, так что 5.0 (последнюю версию) можешь качать смело

  Ответить  
 
 автор: sl1p   (02.09.2008 в 10:02)   письмо автору
 
   для: ronin80   (02.09.2008 в 09:59)
 

так 5.0 и стоит )

хм.. а чё за траблы?..
вдруг потребуется потом чтонить "новое" забадяжить так сказать)

ну щас попробую 6.0.6 поставить))

  Ответить  
 
 автор: ronin80   (02.09.2008 в 10:08)   письмо автору
 
   для: sl1p   (02.09.2008 в 10:02)
 

>ну щас попробую 6.0.6 поставить))

ну если у тебя не рабочая база а тестовая/учебная то можешь конечно, но если рабочая то флаг тебе в руки :)

главное не забудь:

Note: It is good practice to back up your data before installing any new version of software. Although MySQL has done its best to ensure a high level of quality, you should protect your data by making a backup.

  Ответить  
 
 автор: sl1p   (02.09.2008 в 10:15)   письмо автору
 
   для: ronin80   (02.09.2008 в 10:08)
 

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

$limitcount = mysql_result(mysql_query("SELECT COUNT(*) FROM chat"),0) - _CHAT_ROWS;
if($limitcount < 0)$limitcount = 0;
mysql_query("DELETE FROM chat ORDER BY id ASC LIMIT $limitcount");

вот так всё ок, спасибо ещё раз :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования