2

查询是这样的:

CREATE TABLE `query` (
`id` int(11) NOT NULL auto_increment,
`searchquery` varchar(255) NOT NULL default '',
`datetime` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM

首先,我想删除表格:

ALTER TABLE `querynew` DROP `id`

然后删除双重条目..我试过了:

INSERT INTO `querynew` SELECT DISTINCT * FROM `query`

但没有成功.. :(

并且ALTER TABLE query ADD UNIQUE ( searchquery )- 是否可以只保存一次查询?

4

3 回答 3

2

我会使用 MySQL 的多表删除语法:

DELETE q2 FROM query q1 JOIN query q2 USING (searchquery, datetime)
WHERE q1.id < q2.id;
于 2010-04-18T01:29:40.430 回答
0

您应该能够在不首先删除该列的情况下执行此操作:

DELETE FROM `query`
 WHERE `id` IN (
        SELECT `id`
          FROM `query` q
         WHERE EXISTS ( -- Any matching rows with a lower id?
                SELECT *
                  FROM `query`
                 WHERE `searchquery` = q.`searchquery`
                   AND `datetime` = q.`datetime`
                   AND `id` < q.`id`
               )
       );

您也可以通过临时表:

SELECT MIN(`id`), `searchquery`, `datetime`
  INTO `temp_query`
 GROUP BY `searchquery`, `datetime`;

DELETE FROM `query`;

INSERT INTO `query` SELECT * FROM `temp_query`;
于 2010-04-18T01:26:02.067 回答
0

我会使用带有 MySQL 特定IGNORE关键字的索引来执行此操作。这用一块石头杀死了两只鸟:它删除了重复的行,并添加了一个唯一索引,这样你就不会再得到它们了。它通常也比其他方法更快:

alter ignore table query add unique index(searchquery, datetime); 
于 2010-04-18T02:49:50.607 回答