0

次のようなデータベースがあります。

ここに画像の説明を入力

2 番目から 7 番目のようなエントリを削除する必要があります。そのうちの 1 つだけが必要です。と の値が 同じ場合movie_id、それらはすべて同じです。question_id

私は現在次のことを行っており、タイムアウトするまで機能しますが、ID 列でわかるように、50,000 を超えるエントリがあることがわかるように、1,000 程度のエントリでタイムアウトになります。

$top_index = count($all_movies)-1;$top = $all_movies[$top_index];
$max = $top->id;
for($i = 25200; $i<$max-1;$i++){
    for($j = 0; $j<$max-1;$j++){
        if($i != $j){
            if($all_movies[$i]->movie_id == $all_movies[$j]->movie_id){
                if($all_movies[$i]->question_id == $all_movies[$j]->question_id){
                    if($all_movies[$i]->value == $all_movies[$j]->value){
                        echo 'Need to remove '. $all_movies[$j]->id.':<br> Movie Id:'.$all_movies[$i]->movie_id.' Question ID: '.$all_movies[$i]->question_id.' Value: '.$all_movies[$i]->value.'<br>';
                        echo 'Matched with: <br>'. $all_movies[$i]->id.': Movie Id:'.$all_movies[$j]->movie_id.' Question ID: '.$all_movies[$j]->question_id.' Value: '.$all_movies[$j]->value.'<br>';
                        $delete = $post2->movie_value_delete($all_movies[$j]->id);
                        echo 'Deleted: '.$all_movies[$j]->id.'<br><br>';
                    }
                }
            }
        }
    }
}
4

2 に答える 2

3

このようなことは、あなたがしていることに比べて非常に速いはずです。ただし、実行する前にバックアップを取ってください:)

DELETE FROM movies_values
WHERE id NOT IN (
    SELECT MIN(id)
    FROM movies_values
    GROUP BY movie_id, question_id, value
)

読み込んでいるテーブルに書き込めない問題を修正 (午前 2 時、ちょっと休憩してください!) - にコピーmovies_values_testしてmovies_values_test2、 から一意の ID を選択し、一致し_test2ない行を削除できるようにし_testます。

DELETE FROM movies_values_test
WHERE id NOT IN (
    SELECT MIN(id)
    FROM movies_values_test2
    GROUP BY movie_id, question_id, value
)
于 2013-03-03T02:03:01.200 に答える
2

DELETE mv2
    FROM movies_values mv1
        JOIN movies_values mv2 USING (movie_id, value, question_id)
    WHERE mv1.id < mv2.id

2 つのテーブルを組み合わせて、同等のレコードのすべての組み合わせを取得します。次に、「パートナー」が小さいすべてのレコードを削除しますid

UNIQUE KEYこれが再び起こらないようにするために、後で設定することを忘れないでください...

于 2013-03-03T02:25:57.980 に答える