MySQL select оператор с CASE или если ELSEIF? Не уверен, как получить результат
у меня есть две таблицы. Есть информация о производителе и включает в себя регионы, где они могут продать. Другой имеет свои продукты для продажи. Мы должны ограничить видимость продукта на основе регионов. Это похоже на то, что Netflix имеет видео в своей системе, которые можно просматривать только везде (1), только в Канаде (2), только в США (3).
Я пытаюсь сделать запрос, который говорит мне, где продукт может быть просмотрен на основе настроек в производителе стол.
при добавлении видео им не присваивается значение "expose", и это должно быть сделано на лету при добавлении их в наш индекс в зависимости от значений expose_new или expose_used текущего производителя.
то, что я пытаюсь сделать это сведения о товаре и вычисленное значение для того, где он может быть замечен на основе того, является ли он новым или используемым, а также правило/значение, назначенное производителю для всех их новых или используемых продуктов. мне нужна эта единственная цифра на основе каждого продукта, чтобы условно отобразить ее в списке.
следующий не получится, но вы получите представление о том, что я пытаюсь сделать. Я пробовал это с помощью операторов CASE и следующего неправильного оператора IF/ELSEIF.
любая помощь для отладчика это и укажет мне в правильном направлении было бы оценено.
SELECT
t2.company_name,
t2.expose_new, // 1,2 or 3
t2.expose_used, // 1,2 or 3
t1.title,
t1.seller,
t1.status, //can be new or used
(SELECT
IF(status ='New',
(select expose_new from manufacturers where id = t1.seller),1
)
ELSEIF(t1.status ='Used',
(select expose_used from manufacturers where id = t1.seller),1
)
END IF
) as 'expose'
FROM `products` t1
join manufacturers t2 on t2.id = t1.seller
where t1.seller = 4238
вот версия CASE, которая на самом деле кажется выполняемой, но всегда приводит к первому значению независимо от того, что происходит (в данном случае 1). Я не уверен, что у меня может быть добавление другого теста С и в каждом операторе WHEN, но он не дает ошибки, только неправильный результат.
SELECT
t2.company_name,
t2.expose_new,
t2.expose_used,
t1.title,
t1.status,
CASE status
when 'New' and t2.expose_new = 1 then 1
when 'New' and t2.expose_new = 2 then 2
when 'New' and t2.expose_new = 3 then 3
when 'Used' and t2.expose_used = 1 then 1
when 'Used' and t2.expose_used = 2 then 2
when 'Used' and t2.expose_used = 3 then 3
END as expose
FROM `products` t1
join manufacturers t2 on t2.id = t1.seller
where t1.seller = 4238
2 ответа:
попробуйте выполнить этот запрос -
SELECT t2.company_name, t2.expose_new, t2.expose_used, t1.title, t1.seller, t1.status, CASE status WHEN 'New' THEN t2.expose_new WHEN 'Used' THEN t2.expose_used ELSE NULL END as 'expose' FROM `products` t1 JOIN manufacturers t2 ON t2.id = t1.seller WHERE t1.seller = 4238
синтаксис:
CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END
альтернатива: Случай, когда [условие] тогда результат [Когда [условие] Тогда результат ...]
mysql> SELECT CASE WHEN 2>3 THEN 'this is true' ELSE 'this is false' END; +-------------------------------------------------------------+ | CASE WHEN 2>3 THEN 'this is true' ELSE 'this is false' END | +-------------------------------------------------------------+ | this is false | +-------------------------------------------------------------+
Я использую:
SELECT act.*, CASE WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NULL) THEN lises.location_id WHEN (lises.session_date IS NULL AND ses.session_date IS NOT NULL) THEN ses.location_id WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NOT NULL AND lises.session_date>ses.session_date) THEN ses.location_id WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NOT NULL AND lises.session_date<ses.session_date) THEN lises.location_id END AS location_id FROM activity AS act LEFT JOIN li_sessions AS lises ON lises.activity_id = act.id AND lises.session_date >= now() LEFT JOIN session AS ses ON ses.activity_id = act.id AND ses.session_date >= now() WHERE act.id