0

主キーとして descriptionId を持つ mysql テーブルがあり、自動インクリメントされます。また、「コンテンツ」と「価格」の列と、その他いくつかの列があります。

また、複数の入力ボックスで構成されたフォームに、説明テーブルの価格列と内容列の現在のデータベース値が含まれています。フォームを送信した後、テーブルを新しい値で更新したいのですが、入力ボックスのいずれかが削除された場合は、テーブルからレコードを削除する必要があります。

また、すべてのテーブルの列の値を保持する 3 つの配列を定義することもできました。これらの配列は次のとおりです: $descrId,$content,$price

フォームを送信すると、php ファイルがこれらの配列をループし、次のクエリを実行します:(これらの配列を検証したので、正常に動作します)

INSERT INTO     
description(descriptionId,content,price,orderNo,salesPerson,dateTime,updated)
VALUES('{$descrId[$k]}','{$content[$k]}','{$price[$k]}','{$orderId}','{$sale}',NOW(),1 ) 
ON DUPLICATE KEY UPDATE content=VALUES(content),price=VALUES(price),updated=1, dateTime=NOW()

ただし、このクエリは、送信を押すたびに値を複製し続けます。

お時間をいただきありがとうございます....

4

1 に答える 1

1

私があなたの質問を読んだときON DUPLICATE KEY、あなたの主キー は自動インクリメントされた値であり、テーブルに何かを挿入するたびに +1 になるため、値が重複することはありませんAUTO INCREMENT.

したがって、答えは別の列を選択することです。つまりorderNo、 またはdateTime、それを作成してUNIQUEから、クエリで再試行します。

更新
または、2 つ以上の列を組み合わせて (一意の) キーとして定義することもできます。
それも当てはまらない場合は、データを挿入するときにハッシュ関数/アルゴリズムを使用し、そのハッシュをテーブルの他の値に沿って保存します。

于 2012-07-06T09:38:17.027 に答える