2015-08-01 2 views
2

В основном я пытаюсь обновить таблицу, а в случае чего-то изменить, чтобы сохранить уникальный идентификатор измененной строки в другой таблице (с некоторыми другая информация).MySQL: Получить последний идентификатор обновления из таблицы, чтобы вставить его в другую таблицу

это почти тот же принцип, что и LAST_INSERT_ID(), но для обновления не вставлять. Я искал в Интернете, и самое лучшее, что я получил это утверждение:

SET @update_id := NULL; 
UPDATE friendships SET status = ?, id = (SELECT @update_id := id) 
     WHERE (from_user = ? AND to_user = ?) OR (to_user = ? AND from_user = ?); 
INSERT INTO actions(user_id, code, foreign_id) VALUES(?, ?, SELECT @update_id); 

все даного передается вместе с ПДО подготовить функцию выполнить. У меня нет ошибки, но я обновил первую таблицу и ничего не вставил во второй.

@update_id должен содержать идентификатор измененной строки в первом запросе, который будет использоваться во втором.

Я не могу использовать триггер в первой таблице для автоматического обновления второго, потому что мне нужно вставить «код» во вторую таблицу и не передать его в первом запросе (поскольку он не используется или не вставлен в первой таблице).

старался изо всех сил, чтобы объяснить ситуацию .. надеюсь, что у меня понять и помочь мне тоже

много спасибо заранее

ответ

1

Есть 2 способа вставки INSERT ... SELECT и INSERT..VALUES , то не перепутать их, удалите ВЫБРАТЬ в последнем запросе

INSERT INTO actions(user_id, code, foreign_id) VALUES(?, ?,@update_id); 
+1

Да, спасибо .. Я связал это во-первых, но по какой-то причине не работал, так что я пытался использовать разные варианты. Но теперь он работает :-) .. Я надеюсь, что он продолжит это снова спасибо –

0

использовать MySQL TIMESTAMP столбец с «ON UPDATE CURRENT_TIMESTAMP» набор. Вы можете отсортировать этот столбец, чтобы получить недавно измененную запись.

+0

thank вы путь @Mihai короче, и я должен быть быстрее, я думаю –

Смежные вопросы