• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:タグを記録したテーブルの書き換えに関する質問です。)

タグテーブルの書き換えに関する質問

このQ&Aのポイント
  • タグを記録したテーブルの書き換えについて質問があります。タグを記録したテーブルには、エントリーIDとタグが記録されています。質問は、タグテーブルの書き換え方法についてです。
  • 具体的な例として、エントリー1には「foo」「bar」「hoge」というタグが付けられており、エントリー2には「foo」、エントリー3には「foo」と「bar」というタグが付けられています。タグテーブルの書き換えにはどのような処理が考えられるのか、また、既存のレコードを一度削除してからINSERTするという方法が妥当なのかについて知りたいです。
  • 私の考えでは、既存のレコードをすべて削除し、編集後のタグを再度INSERTする方法が妥当かと思います。しかし、他にもっと良い方法があるのかどうか教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

まず条件が必要。 (1)idがint not nullでprimaryもしくはuniqueでauto_incrementであること (2)tag,entryの組合せがuniqueであること insertでデータを流し込み、条件に合致しないデータをdeleteすると効率的です。 insert ignore into tag_table (tag,entry) values('foo',1),('bar',1); delete from tag_table where entry=1 and not(tag IN ('foo','bar')); やっていることは全部消して、新規で投入するのとさほど変わりませんが 上記のようにやると登録済みのデータに対して最小限の更新にとどめられる分 無駄が減ります。(idに余計な付番がなくなります)

bulldozerQ
質問者

お礼

いつも言葉足らずな質問を的確に答えていただきありがとうございます。 まさに求めていた答えでした。 本当にありがとうございました。 感謝してもしきれません。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

>例えばentry1が編集され、タグが「foo」「bar」「hoge」から「foo」「bar」に変更されたとします。 (1)entry1って何ですか? 何の説明もなくいきなり出てきた語句で、意味不明です。 (2)どうして「hoge」が無くなったんですか? 「id=3のレコードのentryが2になったから」などの 説明が抜けています。 >この時、考えられる処理はどういうものになるでしょうか? (1)この時って何の話でしょうか? 変更処理自体のことですか?変更後の話ですか? このページを見ている人はアナタの側で付ききりになって 見ているわけではないので、条件とか用語とか丁寧に説明 しないと、何が何だかサッパリ分かりませんよ。