3

上下投票システムに関するヘルプを探しています。

現時点では、投票したユーザー、投票されたユーザー、および投票された情報 (駐車場) を参照する投票テーブルがあります。

CREATE TABLE parking_spots_votes(
vote_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,

parking_spot_id INTEGER DEFAULT NULL,
    key  parking_spot_id_fk (parking_spot_id),
    FOREIGN KEY (parking_spot_id) REFERENCES parking_spots(id),

uploaded_by_user_id INTEGER DEFAULT NULL,
    key  user_id_fk (uploaded_by_user_id),
    FOREIGN KEY (uploaded_by_user_id) REFERENCES parking_angel_users(id),

vote_casted_user_id INTEGER DEFAULT NULL,
    key  vote_cast_user_id_fk (vote_casted_user_id),
    FOREIGN KEY (vote_casted_user_id) REFERENCES parking_angel_users(id),

vote_type INTEGER NOT NULL
 )

投票タイプは、投票なしの場合は 0、賛成票の場合は 1、反対票の場合は 2 です。

今、私は少し論理的な問題を抱えています。

例えば

  1. ユーザーがすでに parking_spot に投票した場合
  2. ユーザーがすでに投票したかどうか、および挿入していないかどうかを確認するにはどうすればよいですか。

  3. ユーザー (uploaded_by_user_id) スコアを更新するにはどうすればよいですか。賛成票の場合はプラス 1、反対票の場合はマイナス 1 です。

したがって、一般的な流れは次のようになります。

ユーザーが投票を押すと、サーバーはすでに投票されているかどうかを確認します。投票されている場合は、再度投票することはできません。そうでない場合は、vote_casted_user_id = 現在のユーザー、parking_spot_id = 現在の情報、uploaded_by_user_id = 情報をアップロードした人であり、upload_by_user スコアは投票の種類に応じて更新されます。

MYSQL データベースへの JDBC 接続で Java サーブレットを使用しています。

私に何かアイデアはありますか?

4

2 に答える 2

3
  1. ユーザーが既に parking_spot に投票した場合はどうなりますか?
  2. ユーザーがすでに投票したかどうか、および挿入していないかどうかを確認するにはどうすればよいですか。

これらは基本的に同じ質問です: ユーザーが既に parking_spot に投票したかどうかをテストするにはどうすればよいですか? そうですね、parking_spot_id と vote_casted_user_id が一致するレコードを取得するクエリを実行するだけです。

ユーザー (uploaded_by_user_id) スコアを更新するにはどうすればよいですか。賛成票の場合はプラス1、反対票の場合はマイナス1?

それほど面倒でなければ、vote_type の値をプラス投票の場合は +1、マイナス投票の場合は -1 に変更します。それからそれはただの問題ですSELECT SUM(vote_type) FROM table WHERE uploaded_by_user_id=...

これが役立つことを願っています

于 2011-07-20T14:12:59.003 に答える
1

park_spot_id,uploaded_user_id,casted_user_id で主キーを設定することを検討できます

そのため、アップロードされた同じユーザーの同じ駐車場に対して同じユーザーから投票が行われた場合、例外をキャッチして、「あなたはすでに投票しています!」という処理を行うことができます。

これが気に入らない場合は、独自の制御メカニズムを記述してプロセスを処理できます

投票を保存する前に、parking_spot_id、uploaded_user_id、casted_user_id を持つレコードのカウントを取得する選択を書き込みます。カウントが 0 より大きい場合、これは既に投票があることを意味し、保存してメッセージを送信しないでください。それ以外の場合は、投票を保存し、ユーザーのスコアを選択して増加させます投票し、記録を更新します。

お役に立てれば。

于 2011-07-20T14:05:04.960 に答える