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

Форум MySQL

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

 

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

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

тема: удаление строк
 
 автор: m@rchello   (18.05.2009 в 13:55)   письмо автору
 
 

Добрый день

Подскажите пожалуста можно ли удалить из базы лишние строки так чтоб в итоге остало допустим 10 штук.
ну допустим мы имеем такую таблицу
 id | user_id | text 


данные
 
1 | 1 | text 
2 | 2 | text 
3 | 1 | text 
...............
134 | 1 | text 
135 | 2 | text 
136 | 5 | text 
.............


так вот просто удаление всех записей так скажем пользователя 1 будет так
DELETE FROM table WHERE `user_id`=1

а как построить запрос чтобы удалялись не все записи, а все кроме 10 последних (тоесть понимаем что запись последняя по id если оно больше то соответственно запись свежее)

  Ответить  
 
 автор: psychomc   (18.05.2009 в 15:29)   письмо автору
 
   для: m@rchello   (18.05.2009 в 13:55)
 

хм, наверное не одним запросом.
посчитать количество запсией ($count), отсортировать и поставить LIMIT 0, $count-10 (для запроса на удаление)

не уверен что это лучший способ. но это сработает

  Ответить  
 
 автор: Root   (18.05.2009 в 18:01)   письмо автору
 
   для: m@rchello   (18.05.2009 в 13:55)
 

DELETE FROM tbl_name WHERE id < (
  SELECT MIN(id) FROM
  (
    SELECT id FROM tbl_name
    ORDER BY id DESC LIMIT 10
  ) AS s
);

  Ответить  
 
 автор: m@rchello   (18.05.2009 в 20:36)   письмо автору
 
   для: Root   (18.05.2009 в 18:01)
 

спасибо.

  Ответить  
 
 автор: m@rchello   (19.05.2009 в 11:24)   письмо автору
 
   для: Root   (18.05.2009 в 18:01)
 

Ага сейчас начал проверять что у меня получается и получилась ошибка такого вида ...
Database error in module MySQL Library
Invalid SQL: DELETE FROM m_history WHERE id < ( SELECT MIN(id) FROM ( SELECT id FROM m_history WHERE `id_user`=1 ORDER BY id DESC LIMIT 10 ) AS s ) AND `id_user`=1
Error: You can't specify target table 'm_history' for update in FROM clause
Error number: 1093
Date: 19 May 2009, 11:12:34

  Ответить  
 
 автор: Root   (19.05.2009 в 11:58)   письмо автору
 
   для: m@rchello   (19.05.2009 в 11:24)
 

хм, а какая версия сервера?
У меня на 5.1.32 запрос ошибок не выдает.

  Ответить  
 
 автор: m@rchello   (19.05.2009 в 14:56)   письмо автору
 
   для: Root   (19.05.2009 в 11:58)
 

на локале 5.0.45 - ошибок нет
а на хостинге 4.1.22 - выдаёт ошибки =(

  Ответить  
 
 автор: psychomc   (19.05.2009 в 15:04)   письмо автору
 
   для: m@rchello   (19.05.2009 в 14:56)
 

ну так разбейте на 2, делов то...

  Ответить  
 
 автор: m@rchello   (19.05.2009 в 15:07)   письмо автору
 
   для: psychomc   (19.05.2009 в 15:04)
 

да я бы с радостью сделал 2 .... но человек которому делаю требует в 1.
потому как это будет в цикле вызываться и получится вместо 100 (грубо говоря) - 200 запросов .... а это для него сущая проблема.

  Ответить  
 
 автор: Trianon   (19.05.2009 в 16:15)   письмо автору
 
   для: m@rchello   (19.05.2009 в 15:07)
 

Так может не надо его в цикле вызывать?

  Ответить  
 
 автор: psychomc   (19.05.2009 в 17:34)   письмо автору
 
   для: m@rchello   (19.05.2009 в 15:07)
 

странный случай.
я так понял, у вас например в таблице 1000 записей. Вы выбрали на удаление 990 последних. осталось десять. один раз. а цикл зачем?

или там постраничка?

  Ответить  
 
 автор: Root   (19.05.2009 в 17:45)   письмо автору
 
   для: psychomc   (19.05.2009 в 17:34)
 

там условие по id_user

  Ответить  
 
 автор: psychomc   (19.05.2009 в 17:49)   письмо автору
 
   для: Root   (19.05.2009 в 17:45)
 

ааа, точно, первичный просто id

  Ответить  
 
 автор: m@rchello   (20.05.2009 в 19:25)   письмо автору
 
   для: Root   (19.05.2009 в 17:45)
 

всё верно ....

Всем спасибо ... озадачил службу потдержки поставили необходимую версию базы.

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

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