0

次のような INSERT クエリがあります。

$db->Query("INSERT INTO `surfed` (user, site) VALUES('".$data['id']."', '".$id."')");

$id基本的に、上記のクエリと同じように挿入したいのですが、サイトが別のユーザーによって既に送信されている場合は、同じものをサイト列に再送信したくありません。しかし、複数のユーザーが同じサイトを表示でき、すべてのユーザーが表示したサイトと同じ行にいる必要があるため、サーフィンされたテーブルに数万の挿入が発生し、サイトの速度が大幅に低下します。

サイトが既に送信されている場合、別のユーザーに再度送信されないように、何らかの方法で挿入を分割する方法はありますか? 挿入のオーバーロードがないように UPDATE を使用する方法があるのではないでしょうか?

ありがとう、

4

3 に答える 3

0

これを行う最も簡単な方法は、SELECT を実行してユーザー サイトの組み合わせが既にテーブルにあるかどうかを確認するストアド プロシージャを設定することだと思います。そうでない場合は、insert ステートメントを実行します。その組み合わせが既に存在する場合は、完了であり、挿入を実行しません。

ストアド プロシージャに関するマニュアルを確認してください http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html

于 2012-10-29T19:49:47.600 に答える
0

実際に行を挿入したかどうかを知る必要がない場合は、 を使用できますINSERT IGNORE ...

$db->Query("INSERT IGNORE INTO `surfed` (user, site) VALUES('".$data['id']."', '".$id."')");

ただし、これは、列に一意のキーが定義されていることを前提としています。

IGNOREここでは、同じ一意のキーを 2 回追加しようとしてトリガーされた整合性制約違反エラーを無視します。

INSERT 構文に関する MySQL リファレンス マニュアルには、そのhttp://dev.mysql.com/doc/refman/5.5/en/insert.htmlに関する情報が含まれています。

于 2012-10-29T19:53:12.780 に答える
0

IDがすでに存在するかどうかを尋ねる条件文を設定する必要があり、更新する場合はそれ以外の場合は挿入します

于 2012-10-29T19:53:55.920 に答える