最近挿入されたデータ行のIDを取得できるかどうか興味があります。ユーザーが入力できるフォームがあり、フォームのクローンを作成できるので、必要に応じて10個のフォームを追加できます...挿入されたすべてのIDが必要です。それで、これは可能ですか?
6 に答える
mysql_affected_rows
mysql関数を使用して、最後に影響を受けた行を見つけることができます。これがドキュメントです。
SET @uids := null;
UPDATE footable
SET foo = 'bar'
WHERE fooid > 5
AND ( SELECT @uids := CONCAT_WS(',', fooid, @uids) );
SELECT @uids;
これにより、すべてのIDがコロンで連結された文字列が返されます。
SELECT id FROM [yourTable] ORDER BY id DESC LIMIT 2
これを試してみてください:
SQLでは些細なことORDER-BY
です:
SELECT * FROM table ORDER BY id DESC LIMIT 2
単純な意味では不可能です。ただし、これらのIDが必要な場合は、ロジックを変更して、一度に1つずつ挿入を実行できます。
または、(アプリに応じた合理性のレベルで)概算を行うこともできますが、挿入前にMAX(id)を選択してから、select ... WHERE id > $prev_max AND name IN (implode(',', $names))
(このように使用できる名前などのフィールドがあると仮定して)を実行します。
カウントが挿入された行の数と同じであることを確認することにより、選択した行の有効性を検証できます。2要素(id> prevおよびname列のようなもの)を使用すると、このように選択したときに他の人の挿入が取得される可能性はほとんどありません。
また、行をユーザーに帰属させることを検討することもできます。これにより、データの衝突の可能性が排除され、メソッドは非常に単純になります。
SELECT * FROM my_table WHERE user_id = $userID ORDER BY id DESC LIMIT $qtyForms;
もちろん、このような決定は、アプリの構造によって異なります。
AndreiCristianProdanがコメントで述べたように、IDを自動インクリメントします。次に、次のようなものがあります。
SELECT * FROM tableName LIMIT 1 ORDER BY ID DESC
2つの行が-正確に-同時に影響を受けることはありません。これにより、常にテーブルの-last-行が選択されます。
1人のユーザーによって影響を受ける行のみが必要な場合はuser_id
、テーブルにフィールドを追加します。それから加えて
WHERE `user_id` = 'UserIdHere'
SQLステートメントに。
お役に立てば幸いです。