MySQL に次の構造、テーブル 'images_tags' があります。
id | image_id | tag_id
----------------------
1 | 243 | 52
2 | 94 | 52
3 | 56 | 52
4 | 56 | 53
5 | 56 | 54
テーブル「タグ」:
id | tag
---------------
52 | fashion
53 | cars
54 | sports
55 | bikes
CMS でタグを削除する機能を構築しています。そのため、そのタグを含むすべての画像を別のタグに再割り当てする必要があります。問題は、画像に既に新しいタグが割り当てられている可能性があり、レコードが重複する可能性を避けたいことです。
SQLで直接行う正しい方法を見つけることができなかったので、次のようにPHPで試しました:
$result=mysql_query("select image_id from images_tags where tag_id='".$oldtag."'");
while($row=mysql_fetch_assoc($result)){
$result2=mysql_query("select id from images_tags
where image_id='".$row['image_id']."' and tag_id='".$newtag."'");
if(mysql_num_rows($result2)==0){
mysql_query("update images_tags set tag_id='".$newtag."'
where image_id='".$row['image_id']."' and tag_id='".$newtag."'");
}
}
ご覧のとおり、反復内でクエリを実行しているため、私のコードは非常に悪く効率的ではありません。これを行うより良い方法を知っていますか?できれば、たった 1 つの SQL クエリで。ありがとう。