web-dev-qa-db-ja.com

MySQL-最後に挿入された行を最も簡単な方法で選択します

条件で指定された最後に入力された行を選択するだけです、例えば:

SELECT ID from bugs WHERE user=Me

ユーザー「Me」が入力した最後のIDのみを返す必要があります。これを行う簡単な方法はありますか?ありがとうございました。

26
Thomas

デフォルトでCURRENT_TIMESTAMPに設定されるTIMESTAMP列を持つことが最善です。ここで見つけることができる唯一の真の予測動作です。

2番目にできることはORDER BY ID DESC LIMIT 1で、最新のIDが最大値であることを望みます。

38
Matt

ORDER BY ID DESCを使用できますが、そのようにすればずっと速くなります:

SELECT * FROM bugs WHERE ID = (SELECT MAX(ID) FROM bugs WHERE user = 'me')

巨大なテーブルがある場合は、大きな違いが生じる可能性があります。

[〜#〜] edit [〜#〜]

複数回必要な場合(または読みやすいと思う場合)に変数を設定することもできます。

SELECT @bug_id := MAX(ID) FROM bugs WHERE user = 'me';
SELECT * FROM bugs WHERE ID = @bug_id;
31
pmrotule
SELECT MAX(ID) from bugs WHERE user=Me
30
SiLent SoNG

これを達成する1つの方法は、記録を注文して1に制限することです。たとえば、次の表(「データ」)がある場合です。

    id | user | price
   -------------------
    1  |  me  | 40.23
    2  |  me  | 10.23

次のSQLクエリを試してください

  select * from data where user='me' order by id desc limit 1
13
user1400718

並行性では、最新のレコードが入力したばかりのレコードではない場合があります。主キーを使用して最新のレコードを取得することをお勧めします。

自動インクリメントフィールドの場合、SELECT LAST_INSERT_ID();を使用して、作成したばかりのIDを取得します。

8
Wayne
SELECT * FROM `table_name` 
ORDER BY `table_name`.`column_name` DESC
LIMIT 1 
3
rommo roy

PHPからmysqlクエリを実行した直後

でそれを得る

$lastid=mysql_insert_id();

これにより、自動インクリメントID値が最も高くなります

0
pratik shourabh