只有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 
+0

因此,考虑到您的样本数据,和你想只保留最新的'2每种类型,你都要保留ID 12,13,14,15。但不是11,因为它是'TYTIP'中第3个最老的? –

+0

@MarcB是的..我不需要更多的每个URL ID 10个recrods .. – Muhammad

你可以预定一个url_id的列表吗?

因为那么你可以做:

DELETE FROM table_name 
WHERE url_id = 'TITPE' 
ORDER BY time DESC 
LIMIT 10,18446744073709551615; 

这将删除相反的顺序,跳过前10行(和,因为它是在倒车时,这些都是最近的行)。

PS。请务必在实时数据上进行测试之前对其进行测试。

+0

我需要一个解决方案来找到URL_ID和保存最后10条记录......我需要使用选择?或者是否有任何可能删除一个单一的查询? – Muhammad

+1

随着偏移量变大,限制变慢。这看起来很慢。 – Johan

+0

@Johan偏移量固定为10,第二个数字是行数,它刚刚设置为max。 – Ariel

如果您试图保存一小部分记录并删除其余部分,那么选择您保存在临时表中的记录效率会更高(在我熟悉的每个数据库引擎中)并重新创建原始表,然后选择记录早在

因此,例如,这样的事情:

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; 
+0

它的一个很好的解决方案..但仍然我需要PHP循环和URL_ID和删除数据..有没有任何解决方案,我可以做,而无需使用PHP? – Muhammad

+0

我还以为这一点,但我看不到在一个查询中做到这一点。 (我的删除版本也一样)。你可以编写一个存储过程来做到这一点,所以你可以在MySQL而不是PHP中做到这一点。 – Ariel

+0

@Ariel我没有太多的'mysql存储过程'filtiler – Muhammad