Как получить последний вставленный id из таблицы MySQL

Я запускаю 1 скрипт в php, потому что мне нужен последний вставленный идентификатор в таблице подписки. Используя этот идентификатор, я хочу сделать уведомление для этой подписки.

Я использовал:

SELECT LAST_INSERT_ID() FROM subscription 

Я получаю 0 вместо реального последнего вставленного значения.

Если вы используете php для подключения к mysql вы можете использовать mysql_insert_id() чтобы указать на последний вставленный идентификатор.

Как это :

 mysql_query("INSERT INTO mytable (1, 2, 3, 'blah')"); $last_id = mysql_insert_id(); 

См. Так: mysql_insert_id ()

LAST_INSERT_ID() возвращает последний идентификатор из предыдущего оператора insert. Если вы хотите иметь самую последнюю вставленную запись и используете клавиши автоматического увеличения, вы можете использовать следующий код:

 SELECT MAX( id ) FROM subscription; 

Если вам нужно знать, что будет с идентификатором NEXT , вы можете получить это от INFORMATION_SCHEMA

 SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'test' 

mysql_insert_id

Этот вопрос уже ответил много раз: MySQL: LAST_INSERT_ID () возвращает 0

Вы используете эту функцию вне контекста. Он будет работать, только если вы вставили строку непосредственно перед этим:

 INSERT INTO 'subscription' (name) VALUES ('John Smith'); SELECT LAST_INSERT_ID() FROM subscription 

Однако вы можете выбрать строку с наивысшим идентификатором, который логически будет последним добавленным …

 SELECT MAX( id ) FROM subscription; 

Однако стандартный подход состоит в том, чтобы просто вызвать mysqli_insert_id или mysql_insert_id (в зависимости от того, используете ли вы MySQL-библиотеку mysqli или mysql.) Я должен добавить, что библиотека mysql очень нецелесообразна для использования, поскольку она почти полностью устарела). Вот что будет в целом выглядеть:

 $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); $mysqli->query("INSERT INTO 'subscription' (name) VALUES ('John Smith');"); printf ("New Record has id %d.\n", $mysqli->insert_id); //Output is something like: New Record has id 999 

Если, однако, вы не ввели подписку в том же скрипте, что и сбор последнего идентификатора строки, используйте подход «выбрать макс». Это кажется маловероятным, учитывая, что вы упомянули «1 сценарий»,

Кроме того, если ваши идентификаторы не являются последовательными или у вас нет поля идентификатора, или у вас есть идентификатор строки выше, чем тот, который вы только что добавили, вам следует, вероятно, рассмотреть столбец «date_added», чтобы определить, какой из них действительно был последним. Однако эти сценарии маловероятны.

это лучший подход 2 и 3, но MAX (id) занимает больше времени для выполнения.

  1. SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'dbName' AND TABLE_NAME = 'tableName';

  2. SELECT tableName.id FROM tableName ORDER BY tableName.id DESC LIMIT 0,1;

  3. SELECT MAX( id ) FROM tableName;

Это всегда даст вам максимальный идентификатор, который говорит, что наибольшее число – это последний вставленный

  SELECT MAX(id) as MaximumID FROM subscription; 
 $last_id=mysql_query("SELECT id FROM `table_name` ORDER BY id DESC LIMIT 0 , 1" ); $row=mysql_fetch_assoc($last_id); echo $row['id']; 

Замените id на имя поля id в базе данных и table_name по имени вашей таблицы.