Удаление устаревших записей

Chese

Guest
Удаление устаревших записей

Надо удалить энное количество последних записей.
Такой запрос не проходит
DELETE FROM `vote_logs` WHERE userid= 11 ORDER BY votedate LIMIT 39
А такой проходит
SELECT * FROM `vote_logs` WHERE userid = 11 ORDER BY votedate LIMIT 39
В чем дело???

Структура таблицы
CREATE TABLE vote_logs (
id int(6) NOT NULL auto_increment,
userid int(4) NOT NULL default '0',
vote int(2) NOT NULL default '0',
ip varchar(15) NOT NULL default '',
votedate varchar(10) NOT NULL default '',
cat char(1) NOT NULL default '',
lid varchar(32) NOT NULL default '',
PRIMARY KEY (id),
KEY userid (userid),
KEY ip (ip),
KEY cat (cat),
KEY vote (vote,userid)
) TYPE=MyISAM;
 

tony2001

TeaM PHPClub
Выражение ORDER BY и использование нескольких таблиц в команде DELETE поддерживается в MySQL 4.0.
 

Chese

Guest
Блин..
Тогда вопрос, если без ORDER BY то удалятся будут записи сортируясь по PRIMARY KEY?
 

tony2001

TeaM PHPClub
а причем тут сортировка ?
будут удаляться все записи, которые подходят под условие.
в каком порядке они удаляются - тебя не должно волновать.

хинт:
заведи поле с датой и удаляй по дате.
 

Chese

Guest
задача надо оставить определенное количество записей.
Сначала предпологается получить всего,
SELECT COUNT(*) FROM vote_logs WHERE userid=11
= 139
потом оставить только 100 последних
DELETE FROM `vote_logs` WHERE userid = 11 LIMIT 39
 

tony2001

TeaM PHPClub
тогда только двумя запросами - сначала выбрать ИД записей, которые надо удалить, а потом
DELETE FROM table WHERE id IN(1,2,...10,...);

или наоборот - выбрать записи, которые надо оставить и
DELETE FROM table WHERE id NOT IN(1,2,...10,...);
 

RomikChef

Guest
надо завести поле id, если его нет,
сделать запрос select id from table order by id desc limit 99,1
и запрос delete from table where id < $id из первого запроса.
 
Сверху