Slash-Zn
@Slash-Zn

Объясните CASE WHEN THEN?

Написал такой запрос:
$this->database()->query('UPDATE ' . $this->database()->getTable('ad') . ' SET
    view = CASE WHEN ad_id = 34 THEN 0 ELSE view END,
    view = CASE WHEN ad_id = 35 THEN 1 ELSE view END,
    view = CASE WHEN ad_id = 36 THEN 2 ELSE view END,
	amount = CASE WHEN ad_id = 36 THEN 466 ELSE amount END
WHERE ad_id  IN (34, 35, 36)');

Запрос изменяет по одному полю в строках с ad_id = 34 и 35, а в строке с ad_id = 36 изменяет сразу два поля "view" и "amount". Получается четыре поля подвергаются замене в трех строках. А как быть с:
WHERE ad_id IN (34, 35, 36)
Тут тоже надо указывать четыре ID?:
WHERE ad_id IN (34, 35, 36, 36)
Или достаточно указать по разу ID, неважно сколько полей будет затронуто в одной строке?
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
...
SET view = CASE ad_id WHEN 34 THEN 0
                      WHEN 35 THEN 1 
                      WHEN 36 THEN 2
                      END,
    amount = CASE WHEN ad_id = 36 
                  THEN 466
                  ELSE amount
                  END
WHERE ad_id  IN (34, 35, 36);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
$this->database()->query('UPDATE ' . $this->database()->getTable('ad') . ' SET view = 0 WHERE ad_id = 34');
$this->database()->query('UPDATE ' . $this->database()->getTable('ad') . ' SET view = 1 WHERE ad_id = 35');
$this->database()->query('UPDATE ' . $this->database()->getTable('ad') . ' SET view = 2, amount=466 WHERE ad_id = 36');

И не делайте себе мозги.
Вы и сейчас-то смотрите на этот запрос как баран на новые ворота. А через месяц и вовсе перестанете понимать, что имели в виду.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы