2

我有下表

+-----------+------------------+------+-----+---------+----------------+
| 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!即,如果用户 ID 5 已经有 10 行并且我正在插入一个新行,我需要在插入之前删除其中最旧的行。

有没有办法编写一个DELETE包含用户 ID 的所有条目的 SQL 语句,除了最近的 10 个条目。我知道如何使用LIMITa SELECT,但我看不到如何在 a 中实现 LIMIT DELETE

4

2 回答 2

4

这些方面的东西应该起作用:

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

-- 添加:其中用户 ID = xyz

于 2012-02-08T17:32:23.653 回答
0
DELETE from table
WHERE id NOT IN(
      SELECT id FROM table GROUP BY userid ORDER BY logintime DESC LIMIT 10)
于 2012-02-08T17:45:43.350 回答