MySQL Update Conundrum - PullRequest
       11

MySQL Update Conundrum

1 голос
/ 14 июля 2011

У меня есть таблица с именем Advert_images.В этой таблице у меня может быть несколько записей для каждого advert_id.Каждая запись в таблице Advert_images имеет уникальное поле с именем «image_id».например,

image_id   advert_id   main
---------------------------
1          1           0
2          1           0
3          1           0
4          2           0
5          2           0

Я хочу сделать следующее:

Обновить поле с именем main до 1 только в первой записи (самый низкий идентификатор изображения) для каждой отдельной записи.advert_id.IE: я хотел бы обновить записи с image_id из 1 и 4 и установить основное поле на 1.

Ответы [ 2 ]

2 голосов
/ 14 июля 2011

Использование производных таблиц позволяет обращаться к одной таблице несколько раз в UPDATE:

UPDATE Advert_images a
INNER JOIN (
 SELECT advert_id, MIN(image_id) as image_id FROM Advert_images 
 GROUP BY advert_id)b
ON b.image_id = a.image_id
SET a.main = 1
2 голосов
/ 14 июля 2011

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

UPDATE Advert_images
SET (main = 1)
WHERE (image_id IN (
   SELECT min(image_id)
   FROM Advert_images
   GROUP BY advert_id
));

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

...