1

、、、、、の列idを持つテーブルがあります。ユーザーが [いいね] ボタンをクリックすると、対応するとを含む行がテーブルに追加され、が に設定されます。行がすでに存在し、列がすでに である場合、何も起こりません。user_idpost_idlikeviewsuser_idpost_idlike1like1

ユーザーが特定のページにアクセスすると、テーブルに行が追加され、対応するおよびuser_idがに設定されます。ただし、行が既に存在する場合は、値がインクリメントされます。post_idview1view

問題:を使用しようとしINSERT INTO mytable ... ON DUPLICATE KEY UPDATE like = 1ましたが、テーブルの主キーはidand ではなくuser_idorpost_idです。主キーを または のいずれかに設定するuser_idと、同じandpost_idを持つ行が存在する場合にのみ行が複製されるため、問題が発生します。user_idpost_id

この状況では、クエリをどのように作成する必要がありますか?

または、テーブルを 2 つのテーブルに分割することをお勧めしlikesますviewsuser_idこの場合、行と列の両方に基づいて行を一意にする必要がありpost_idます。

または、複数の SQL クエリを実行しますか?

アドバイスしてください、ありがとう!

4

2 に答える 2

1

いいねのテーブルを用意し、投稿を保持するテーブルにビューの行を追加することをお勧めします。したがって、この投稿が表示されるたびに、その投稿のビュー値をビュー = ビュー + 1 に更新するだけです。

主キーについて概説した問題に対処するために、そのシナリオでは一意のキーを使用できることに注意してください。これは複数の列に適用でき、遭遇した問題を修正します。たとえば、シナリオでユーザー ID とポスト ID の両方を含む一意のキーがある場合、データベースでは、そのテーブルに同じユーザー ID とポスト ID を持つ 2 つの異なる行を許可しません。

したがって、今後の参考のために、必要に応じて一意のキーを使用してください:)

于 2012-07-21T21:05:22.893 に答える
0
  1. ID を主キーとして破棄する
  2. 2 つのテーブルを使用する
  3. (user_id, post_id) を主キーにする
  4. insert like を処理するときは、insert ignore を行います
  5. 挿入ビューを処理するときは、挿入を行います..重複キー更新ビュー=ビュー+1
于 2012-07-21T20:32:58.417 に答える