2

ratingこれらのフィールドを含むテーブルがありますrate_id, game_id, rating, ip。これらのフィールドの値が次のようになっているとします。1,130,5,155.77.66.55

ipユーザーがゲームに投票しようとすると、mysqlでこのゲームにすでに投票しているかどうかを確認したいので、mysqlはgame_id存在するかどうかを確認し、存在する場合はmysqlが値を更新し、ratingそうでない場合は新しいエントリを作成します。

これを行うための効率的な方法は何ですか?

4

4 に答える 4

8

をカバーする一意のインデックスを作成しますip + game_id。その後、INSERT ... ON DUPLICATEKEYUPDATEステートメントを使用できます。

したがって、クエリ全体は次のようになります。

INSERT INTO rating (rate_id, game_id, rating, ip) VALUES (1,130,5,'155.77.66.55')
ON DUPLICATE KEY UPDATE rating = 5
于 2011-04-22T12:39:28.757 に答える
3

MySQLでは、INSERTの重複キー更新構文が許可されています。したがって、キーをgame_id、user_id(またはユーザーを識別する方法)に設定すると、DUPLICATEKEYUPDATEでINSERT...を使用できます。

http://dev.mysql.com/doc/refman/5.5/en/insert.html

于 2011-04-22T12:40:21.097 に答える
0

REPLACEINTOもご覧ください。多分このプロジェクトのためではなく、将来の参考のために:

REPLACEはINSERTとまったく同じように機能しますが、テーブル内の古い行がPRIMARY KEYまたはUNIQUEインデックスの新しい行と同じ値である場合、新しい行が挿入される前に古い行が削除されます。

差出人:dev.mysql.com

于 2011-04-22T14:22:21.750 に答える
-1
// check to see if exist
$sql = "SELECT ip FROM rating WHERE ip=$ip && game_id={$game_id}";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);

if(isset($row['ip'])){
  mysql_query("UPDATE HERE");
}else{
  mysql_query("INSERT HERE");
}
于 2011-04-22T12:41:48.287 に答える