我需要一个解决方案来删除所有记录但是通过ID_URL而不是BY UNIQUE ID(主键)保存最后10个。
我的数据库结构和记录视图..
我需要保存每个URL_ID的最后10个项目..
编辑:也许大多数人或者你对我所询问的事情感到困惑..实际上我只想保存新的10条每条URL_ID记录.. ID IP TIME(TIMESTAMP) BROWSER Visitor_URL URL_ID
11 xxx.xxx.xx.xx 3/15/2010 14:43 Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 V... link_link TYTIP
12 xxx.xxx.xx.xx 3/15/2010 14:43 Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 V... link_link TITPE
13 xxx.xxx.xx.xx 3/15/2010 14:43 Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 V... link_link XAIP
14 xxx.xxx.xx.xx 3/15/2010 14:44 Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 V... link_link TYTIP
15 xxx.xxx.xx.xx 3/15/2010 14:44 Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 V... link_link TYTIP
.....1000's of Other Records
答案 0 :(得分:2)
您可以制作url_id
的预定义列表吗?
因为那时你可以这样做:
DELETE FROM table_name
WHERE url_id = 'TITPE'
ORDER BY time DESC
LIMIT 10,18446744073709551615;
这将以相反的顺序删除,跳过前10行(因为它是反向的,那些是最近的行)。
PS。在尝试使用实时数据之前,请务必先测试一下。
答案 1 :(得分:1)
如果您正在尝试保存一小部分记录并删除其余记录,那么选择那些保存在临时表中的记录,丢弃和更高效(在我熟悉的每个数据库引擎中)重新创建原始表,然后再选择记录。
所以例如这样:
DROP TABLE IF EXISTS records_temp;
CREATE TEMPORARY TABLE records_temp LIKE original_table;
INSERT INTO records_temp SELECT * FROM original_table WHERE URL_ID = "TYTIP" ORDER BY ID DESC LIMIT 10;
(then do that again for each type)
DROP TABLE original_table;
CREATE TABLE original_table LIKE records_temp;
INSERT INTO original_table SELECT * FROM records_temp;
DROP TABLE records_temp;