ОБНОВЛЕНИЕ MySQL ГДЕ для каждого перечисленного значения отдельно? - PullRequest
0 голосов
/ 19 марта 2010

У меня есть следующий тип SQL:

UPDATE photo AS f 
  LEFT JOIN car AS c 
         ON f.car_id=c.car_id 
  SET f.photo_status=1
    , c.photo_count=c.photo_count+1 
  WHERE f.photo_id IN ($ids)

В основном две таблицы (car & photo) связаны между собой. Список в $ ids содержит уникальные идентификаторы фотографий, такие как (34, 87, 98, 12). С помощью запроса я устанавливаю статус каждой фотографии в этом списке на «1» в таблице photo и одновременно увеличиваю количество фотографий в таблице car для автомобиля под рукой.

Это работает, но есть одна загвоздка: поскольку список может содержать несколько идентификаторов фотографий, относящихся к одной и той же машине, количество фотографий увеличивается только один раз. Если бы в списке было 10 фотографий, связанных с той же машиной, photo_count стал бы 1 .... тогда как я хотел бы увеличить его до 10.

Есть ли способ сделать приращение для каждой фотографии отдельно через объединение, в отличие от MySQL, переосмысливающего это для меня?

Надеюсь, вышесказанное имеет смысл. Спасибо.

Ответы [ 2 ]

6 голосов
/ 19 марта 2010

Вы можете сделать это с помощью двух запросов:

UPDATE car
SET photo_count = photo_count + (
    SELECT count(*)
    FROM photos
    WHERE photo.car_id = car.car_id
    AND photo_status = 0
    AND photo_id IN ($ids)
);

UPDATE photo
SET photo_status = 1
WHERE photo_id IN ($ids);
1 голос
/ 19 марта 2010

Что я думаю, вы должны сделать:

обновить таблицы в два этапа. Сначала установите статус 1 в таблице фотографий, затем обновите счетчик (используя group by и count (...)) для таблицы автомобилей.

EDIT Отказался от «наивного подхода», не будет работать, так как ОП правильно заявляет!

...