仅保存10条记录,但通过ID Huge Database删除所有其他记录

时间:2011-09-23 21:51:37

标签: php mysql database sql-delete

我需要一个解决方案来删除所有记录但是通过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

2 个答案:

答案 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;