SELECTMySQLテーブルの最後の行はどうすればよいですか?
私はしていINSERTたデータをすると、私は前の行から列の値を取得する必要があります。
ありますauto_incrementテーブルでは。
auto_incrementにあります。最近追加したものをお願いします。
SELECTMySQLテーブルの最後の行はどうすればよいですか?
私はしていINSERTたデータをすると、私は前の行から列の値を取得する必要があります。
ありますauto_incrementテーブルでは。
auto_incrementにあります。最近追加したものをお願いします。
回答:
はい、そこにauto_incrementがあります
テーブルのすべての行の最後が必要な場合は、これが最終的MAX(id)に正しい答えが得られるタイミングです。やや:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
idインデックスが作成されている場合。
リレーショナルデータベースのテーブルは単なる行のセットであることに注意してください。そして、数学の集合は順序付けられていないコレクションです。最初または最後の行はありません。前の行も次の行もありません。
最初に、順序付けられていない行のセットを何らかのフィールドでソートする必要があります。その後、定義した順序で結果セットを繰り返し処理できます。
自動インクリメントフィールドがあるので、それを並べ替えフィールドにしたいと思います。その場合は、次の操作を実行できます。
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
順序付けされていない行のセットをyour_auto_increment_field(またはそれが呼び出したもの)で降順で最初に並べ替える方法を確認します。次に、結果セットを最初の行だけに制限しLIMIT 1ます。
@spacepilleによって提案された2つのクエリを組み合わせて、次のような単一のクエリにすることができます。
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
非常に高速に動作するはずですが、INNODBテーブルでは、ORDER + LIMITよりもミリ秒単位の速度が遅くなります。
answered Jun 14 at 9:41約1年6か月前の日付です:)
単純に使用する: PDO::lastInsertId
ほとんどすべてのデータベーステーブルには、auto_increment列があります(通常はid)
テーブルのすべての行の最後が必要な場合は、
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
または
次のような2つのクエリを1つのクエリに結合できます。
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
SELECT * FROM adds where id=(select max(id) from adds);
このクエリは、テーブルの最後のレコードをフェッチするために使用されました。
ここでの多くの答えは同じです(自動インクリメントで並べ替え)。これは、インデックスに自動インクリメントされた列がある場合は問題ありません。
あなたは、このようなフィールドを持っており、それがあればサイドノートでは、ある主キー、使用のためのパフォーマンスの低下はありませんorder by対select max(id)。主キーは、データベースファイルでのデータの順序付け方法(少なくともInnoDBの場合)であり、RDBMSはそのデータの終わりを認識しており、最適化できます。order by id + limit 1到達するのと同じになるようにます。max(id)
現在、移動の少ない道は、自動インクリメントされた主キーがない場合です。多分主キーは3つのフィールドの複合である自然キーです...すべてが失われるわけではありません。プログラミング言語から、最初に行数を取得できます
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
そして、LIMIT節で取得した数値を使用します
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
残念ながら、MySQLでは、サブクエリ、またはLIMIT節内のユーザー変数は許可されません。