3

重複の可能性:
MySQLクエリのみを使用して重複を削除しますか?

異なるページのテーブルがありますが、それらのいくつかは重複しています。重複を判別する唯一の方法は、タイトルによるものです。以下のコードを実行すると、完全に機能します。

<?php

mysql_connect("localhost", "root", "root") or die(mysql_error());
mysql_select_db("old") or die(mysql_error());
$result = mysql_query("SELECT pagetitle, COUNT( * ) c
FROM cms_site_content
GROUP BY pagetitle
HAVING c >1") or die(mysql_error());  
while($row = mysql_fetch_array($result)){
    echo $row['id'].'-'.$row['pagetitle'].'<br />';
}

?>

私の質問は、重複を消去して1つのエントリのみを保持するにはどうすればよいですか。たとえば、「DuplicateArticle」という記事があり、その結果は次のようになります。

重複記事:3

1つだけ残しておきたい。

4

5 に答える 5

8

INNER JOINテーブル自体を作成し、pagetitle値が同一であるがprimary key(IDを識別子として使用している)そうでない場所を削除する必要があります。

試す:

DELETE c2 FROM `cms_site_content` c1 INNER JOIN
               `cms_site_content` c2
          ON c1.pagetitle = c2.pagetitle AND c1.ID <> c2.ID

参照http ://dev.mysql.com/doc/refman/5.0/en/join.html

于 2012-08-10T15:47:10.440 に答える
0

すべての単一行を選択し、それらを一時テーブルに挿入し、すべてのレコードを削除し、一時からそれらを挿入し直します

いくつかのアプリケーションロジックを使用します。各複数行から1つだけを選択し、テーブルからすべてを削除してから、単一の行を挿入し直します。

于 2012-08-10T15:47:19.440 に答える
0

これを試してください:SELECT DISTINCT pagetitle、id、FROM cms_site_content

上記のSQLからPHPを使用してすべてのIDをidlistに保存してから、以下を実行します。

DELETE FROM cms_site_content WHERE id NOT in($ idlist)

上記のSQLステートメントをPHP/MySQLコードに変換する必要があります。

于 2012-08-10T15:51:02.600 に答える
0

この行は目覚めました:

DELETE t2
FROM cms_site_content t1
JOIN cms_site_content t2 ON (t2.pagetitle = t1.pagetitle AND t2.id > t1.id);
于 2012-08-10T16:32:20.437 に答える
-2

これを試して

DELETE t1 FROM table t1, table t2 WHERE t1.id > t2.id AND t1.name = t2.name
于 2012-08-10T15:49:32.530 に答える