只有10保存记录,但删除所有其他的ID庞大的数据库
问题描述:
我需要一个解决方案删除所有记录,但通过ID_URL保存最后10不是唯一的ID(主键)..只有10保存记录,但删除所有其他的ID庞大的数据库
我的数据库结构和记录查看。 。
我要节省每URL_ID的最后10项..
编辑:也许大部分还是你困惑什么,我问..其实我只是想救唯一的新10 EVERY 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
答
你可以预定一个url_id
的列表吗?
因为那么你可以做:
DELETE FROM table_name
WHERE url_id = 'TITPE'
ORDER BY time DESC
LIMIT 10,18446744073709551615;
这将删除相反的顺序,跳过前10行(和,因为它是在倒车时,这些都是最近的行)。
PS。请务必在实时数据上进行测试之前对其进行测试。
答
如果您试图保存一小部分记录并删除其余部分,那么选择您保存在临时表中的记录效率会更高(在我熟悉的每个数据库引擎中)并重新创建原始表,然后选择记录早在
因此,例如,这样的事情:
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;
因此,考虑到您的样本数据,和你想只保留最新的'2每种类型,你都要保留ID 12,13,14,15。但不是11,因为它是'TYTIP'中第3个最老的? –
@MarcB是的..我不需要更多的每个URL ID 10个recrods .. – Muhammad