0

列を作成して、ユーザーが行った挿入の試行回数をカウントしようとしています。

例は物事をより明確にします:

+-------+----------------------------------+--------------+
| text  |            md5                   | insert_times | 
+-------+----------------------------------+---------+----+
| 123   | 202cb962ac59075b964b07152d234b70 |     834      |  
| abc   | 900150983cd24fb0d6963f7d28e17f72 |     923      |      
+-------+----------------------------------+--------------+

text主キーです。
ユーザーが挿入を試みるたびに123(既に存在するINSERT IGNOREためエラー メッセージが表示されないようにするために使用)、テーブルに既存のテキストを挿入しようとした回数を追跡しながら、が増加します。123insert_times1

作り方のアイデアはありますか?
データベースホスト (godaddy) がトリガーを許可していないため、トリガーを作成できません。
でできない場合はmysql、の助けを借りてやってのけることができphpますか?

4

3 に答える 3

2

単一の単純なクエリ内でこれを行うには、ON DUPLICATE KEY UPDATEMySQL 内で関数を使用するだけです。これにより、単に INSERT を実行し、その後に「複製」行で更新する必要があるものを実行します。例えば:

INSERT INTO tbl (text, md5, insert_times) VALUES ('abc', {MD5}, 0}
ON DUPLICATE KEY UPDATE insert_times+1;

ただし、個人的には PHP のアプローチを好みます。ほとんどのクエリでは、通常、単純な更新ほど切り詰められていないからです。

$res = mysql_query(sprintf("SELECT text FROM tbl WHERE text = '%s'", $text));
if (mysql_num_rows($res) != 0)
{
    mysql_query(sprintf("UPDATE tbl SET insert_times+1 WHERE text = '%s'", $text);
}
else
}
    mysql_query(sprintf("INSERT INTO tbl SET text = '%d', md5 = '%s'", $text, $hash);
}

この方法では、必要に応じて、他のイベント/機能もトリガーする余地が残されています。

于 2012-07-15T04:12:39.203 に答える
1

そのパーティキュラ キーのテーブルにそのレコードが既に存在するかどうかを確認します。存在する場合は、insert_times の値を に更新しinsert_times+1ます。、それ以外の場合は新しいレコードを作成します。

于 2012-07-15T04:07:24.133 に答える
0

行を挿入する前に行が存在するかどうかを確認するロジックをスクリプトに入れることができます。存在しない場合は、INSERT クエリを実行します。含まれている場合は、insert_times フィールドをインクリメントします。

一意性制約を持たない別の insert_attempts テーブルを保持することもできます。行を挿入しようとするたびに、2 つのクエリを実行します。現在行っているクエリと、insert_attempts に対するクエリです。insert_attempts に対するものは、新しい行を挿入し、関連する ID を持つ行を COUNT() するか、その ID に関連付けられた番号をチェックして更新することができます。

于 2012-07-15T04:07:47.817 に答える