我有下表
+-----------+------------------+------+-----+---------+----------------+
| 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个!即如果userid 5有10行,我已经插入一个新行,我需要在插入之前删除其中最旧的一行。
有没有办法编写一个SQL语句,DELETE
用户标识的所有条目,除了最近的10个。我知道如何将LIMIT
用于SELECT
,但我看不出如何在DELETE
中实现LIMIT。
答案 0 :(得分:4)
这些方面应该有效:
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
答案 1 :(得分:0)
DELETE from table
WHERE id NOT IN(
SELECT id FROM table GROUP BY userid ORDER BY logintime DESC LIMIT 10)