1

値のグループを識別する番号を持つテーブルがあります。この数は、値の配列がデータベースにロードされるたびに増加するため、一度に挿入された値ごとにこの数が繰り返されます。

フォームを使用して PHP で新しい値を入力できるように、この数値を取得して 1 を追加するにはどうすればよいですか?

これを行うためのより良い方法があれば、私は知っていることに感謝します。

ありがとう

4

3 に答える 3

1

増分列でテーブルを降順に並べ、結果を最初の行のみに制限します。これが最高値になります。

SELECT incrementing_column 
FROM table 
ORDER BY incrementing_column DESC 
LIMIT 1
于 2012-07-25T20:44:39.040 に答える
1

並行性の問題を考慮する必要があります。たとえば、2 人のユーザーがそれぞれ "新しい" 配列の数値をテーブルに追加している場合、それらのユーザーに同じシーケンス番号を使用させたくないでしょう。したがって、両方が同じシーケンス番号を返さないようにする何らかの「アトミック」操作が必要です。

(ここでは、「シーケンス」番号として整数値が許容されると仮定します。質問にそうではないという指示がなければ。)

1 つの方法は、次のように、この「シーケンス」番号を含む列のみを含むテーブルを AUTO_INCREMENT として定義することです。

CREATE TABLE seq (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY);

次に、「新しい」ID 番号を取得するには、テーブルに INSERT を実行し、自動生成された ID 値を取得します。SQL ステートメントは次のようになります。

INSERT INTO seq (id) VALUES (NULL);
SELECT LAST_INSERT_ID() AS id;

LAST_INSERT_ID の値を取得する他の (より簡単な) 方法がありますが、特定の方法は、mysqli (mysqli_insert_id) または PDO (lastInsertId) のどちらを使用しているかによって異なります。

このアプローチは、(MySQL で) Oracle スタイルの SEQUENCE オブジェクトに最も近い方法です。

他のアプローチもありますが、一部は根本的に壊れており (重複した値を返す可能性があるため)、一部は同時実行性に悪影響を及ぼします (同時取得や更新を防ぐためにテーブルをロックするため)。

于 2012-07-25T20:57:05.483 に答える
-2

MySQL の自動インクリメント機能を調べることができます。

http://www.w3schools.com/sql/sql_autoincrement.asp

これにより、値を指定しなくても、新しいレコードが入力されるたびに自動的にインクリメントされる単一の ID フィールドを識別することができます。

于 2012-07-25T20:44:33.033 に答える