@iSensetivity
бухгалтер, програміст-самоук

Можно ли такое сделать одним запросом, если да, то как?

Если таблица yard
user_id
culture_id
count_culture

с которой нужно минуснуть товар после продажи. Входные данные массив ІДов culture_id и число проданного товара count_culture.
Т.е. возможно ли
UPDATE `yard` SET `count_culture` = count_culture -3 WHERE culture_id = 1;
UPDATE `yard` SET `count_culture` = count_culture -10 WHERE culture_id = 2;
сделать один запрос массив с данными.
Или в цикле каждый ид крутить?

Пытался так: UPDATE `yard` SET `count_culture` = count_culture - (3, 10) WHERE IN (1, 2);
  • Вопрос задан
  • 2886 просмотров
Решения вопроса 2
inside22
@inside22
MySQL Batch Update:
UPDATE  `yard` 
    SET `count_culture` = CASE `culture_id`
        WHEN 1 THEN `count_culture` -3
        WHEN 2 THEN `count_culture` -10
    END 
WHERE culture_id IN (1,2);
Ответ написан
Комментировать
Vakiliy
@Vakiliy
Извратно немного:
UPDATE yard SET  count_culture = count_culture + t.value 
FROM ( VALUES(1,33), (2,3) .....(n.id, n.values)) AS t(culture_id, value) 
WHERE t.culture_id = yard.culture_id;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
akubintsev
@akubintsev
Опытный backend разработчик
UPDATE yard SET count_culture = count_culture +1 WHERE ...

Чем такой банальный способ не годится?
Ответ написан
Если у вас покупают товар №1 - 2 штуки и товар №2 - 4 штуки, то одним запросом это никак не реализовать.
Ответ написан
Комментировать
@iSensetivity Автор вопроса
бухгалтер, програміст-самоук
Так идов много и значение которьіе нужно менять тоже много.
Т.е. возможно ли
UPDATE `yard` SET `count_culture` = count_culture -3 WHERE culture_id = 1;
UPDATE `yard` SET `count_culture` = count_culture -10 WHERE culture_id = 2;
сделать один запрос масив с данньіми.
Или в цикле каждьій ид крутить?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы