Я запускаю 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) занимает больше времени для выполнения.
SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'dbName' AND TABLE_NAME = 'tableName';
SELECT tableName.id FROM tableName ORDER BY tableName.id DESC LIMIT 0,1;
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
по имени вашей таблицы.