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`

次に、doubleエントリを削除します。私はそれを試してみました:

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

IGNOREこれは、MySQL 固有のキーワードを含むインデックスを使用して行います。これは一石二鳥です。重複する行を削除し、一意のインデックスを追加して、それ以上行を取得しないようにします。通常、他の方法よりも高速です。

alter ignore table query add unique index(searchquery, datetime); 
于 2010-04-18T02:49:50.607 に答える
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 に答える