Вечная проблема Мускуля: как получить айди последней вставленной строки? И ладно, она худо-бедно решается. Но как быть, если надо получить инфу о тех строках, которые были задействованы в апдейте или удалены?
Допустим, у нас какой-то сложный запрос на апдейт с кучей условий. Как в Мускуле найти те строки, что были изменены? Только если "танцы с бубном".
Мечта "мускулиста":
1. Сначала, например, апдейт:
UPDATE ..... WHERE .....
2. Затем получить все строки, что были изменены
SELECT .... WHERE <СТРОКИ, ИЗМЕНЕННЫЕ ПОСЛЕДНИМ АПДЕЙТОМ>
В Постгре же эта проблема решается просто и изящно. В любом запросе INSERT, UPDATE, DELETE мы можем в конце приписать "волшебное" слово RETURNING и список полей, которые хотим получить. То есть, мы пишем нужный запрос, отправляем его, полученный ответ обрабатываем в ПХП также, как если бы это был простой SELECT
UPDATE .... WHERE .... RETURNING *
Данный запрос сделает апдейт вернет все задействованные в апдейте строки и все их поля.
INSERT INTO ... ... .... .. ... RETURNING id
Этот запрос вставит данные и вернет айди вставленной строки (если она одна) или всех вставленных строк (если их было несколько).
Вместо id или "звездочки" можно указать любые колонки из таблицы.
Как видим, никаких "танцев с бубном", всё просто и изящно

Работает, подчеркиваю еще раз, для INSERT, UPDATE, DELETE - для любых запросов, изменяющих данные.
Ну как, пишем еще один "+1" в адрес Постгре? Или имеются возражения у кого-нибудь?
_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL
* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.
* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
