Как автоматически ограничить количество строк в базе данных? - PullRequest
2 голосов
/ 08 февраля 2012

У меня есть следующая таблица

+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| ID        | int(11) unsigned | NO   | PRI | NULL    | auto_increment | 
| userid    | int(10) unsigned | NO   | MUL | NULL    |                | 
| logintime | int(10) unsigned | NO   |     | NULL    |                | 
| loginIP   | int(4) unsigned  | NO   |     | NULL    |                | 
+-----------+------------------+------+-----+---------+----------------+

Я вставляю новую строку в эту таблицу каждый раз, когда пользователь входит в систему, которая содержит его время входа в систему, IP-адрес и т. Д. *

Теперь я хочу ограничить количество строк до 10 на пользователя!то есть, если уже есть 10 строк для идентификатора пользователя 5, и я вставляю новую, мне нужно удалить самую старую из них перед вставкой.

есть ли способ написать инструкцию SQL, которая DELETE s все записи идентификатора пользователя, кроме последних 10.Я знаю, как использовать LIMIT для SELECT, но не могу понять, как я могу реализовать LIMIT в DELETE.

Ответы [ 2 ]

4 голосов
/ 08 февраля 2012

Что-то в этом духе должно работать:

DELETE FROM
  table 
WHERE
 userID = xyz and id not in (
  SELECT id FROM table WHERE userID = xyz ORDER BY logintime DESC LIMIT 10
 )

- добавлено: где userID = xyz

0 голосов
/ 08 февраля 2012
DELETE from table
WHERE id NOT IN(
      SELECT id FROM table GROUP BY userid ORDER BY logintime DESC LIMIT 10)
...