Mysql, как прочитать значение автоинкремента в других полях этой же строки вставки?

Здравствуйте, мне нужно иметь идентификатор транзакции в поле комментария моей транзакции

mysql_query("INSERT INTO `transactiontb` (`tid`, `amount`, `comment`) VALUES (NULL,'$amount', CONCAT('Transaction # ',`tid`)')");

Как я могу это сделать?

0

Решение

  1. Отстань от mysql_ * функций. Посмотрите на MySQLi или PDO.
  2. Не храните tid дважды. Почему бы не сделать конкат, когда вы выберете его вместо того, чтобы хранить его таким образом? Это не лучший способ.

Для справки попробуйте LAST_INSERT_ID()+1):

INSERT INTO `transactiontb` (`tid`, `amount`, `comment`)
VALUES (NULL, '$amount', CONCAT_WS('Transaction # ', LAST_INSERT_ID()+1))

LAST_INSERT_ID() даст идентификатор предыдущего INSERT, а не идентификатор текущего INSERT, поэтому вы должны добавить 1.

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

Сгенерированный идентификатор сохраняется на сервере
на основе подключения. Это означает, что значение, возвращаемое
Функция для данного клиента — это первое сгенерированное значение AUTO_INCREMENT.
для самого последнего утверждения, затрагивающего столбец AUTO_INCREMENT этим
клиент. На это значение не могут повлиять другие клиенты, даже если они
генерировать собственные значения AUTO_INCREMENT. Такое поведение обеспечивает
что каждый клиент может получить свой собственный идентификатор, не заботясь о
деятельность других клиентов, без необходимости в замках или
сделки.

2

Другие решения

Использовать LAST_INSERT_ID() функция.

LAST_INSERT_ID () (без аргумента) возвращает значение BIGINT (64-разрядное)
представляющий первое автоматически сгенерированное значение, которое было установлено для
столбец AUTO_INCREMENT последней выполненной вставкой
Заявление повлиять на такой столбец.

Источник: Документация MySQL

Пример:

"INSERT INTO transactiontb(tid, amount, comment) VALUES (NULL,'" . $amount . "', CONCAT_WS('#','Transaction',LAST_INSERT_ID(id+1)))"

Просто видел, что вы также забыли поставить разделитель для вас CONCAT_WS функция, поэтому я исправил это в примере запроса.

0

По вопросам рекламы [email protected]