У меня есть две таблицы. Один содержит информацию о производителе и включает регионы, в которых они могут продавать. У другого есть свои товары в продаже. Мы должны ограничить видимость продукта по регионам. Это похоже на то, что у Netflix есть видео в их системе, которые можно просматривать только везде (1), только в Канаде (2), только в США (3).
Я пытаюсь сделать запрос, который скажет мне, где можно просмотреть продукт, на основе настроек в таблице производителя.
Например, в таблице производителей есть два поля с именами expose_new и expose_used, каждое из которых будет иметь значение 1,2 или 3, чтобы ограничить, где их новые или использованные видео могут быть просмотрены.
Когда видео добавляются, им не присваивается значение 'expose', и это должно выполняться на лету при добавлении их в наш индекс в зависимости от значений expose_new или expose_used текущего производителя.
Я пытаюсь получить подробную информацию об элементе и вычисленное значение, в котором его можно увидеть в зависимости от того, новый он или использованный, а также правило / значение, присвоенное производителю для всех его новых или бывших в употреблении продуктов. Мне нужна эта единственная цифра для каждого продукта, чтобы условно отображать ее в списке.
Следующее не работает, но вы поймете, что я пытаюсь сделать.Я пробовал это с помощью операторов CASE и следующего оператора WRONG 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