У мене є дві таблиці. Один має інформацію про виробника і включає регіони, де вони можуть продавати. Інші продають свою продукцію. Ми повинні обмежити видимість товару залежно від регіонів. Це схоже на те, що в системі Netflix є відео, які можна переглядати лише скрізь (1), лише в Канаді (2), лише в США (3).
Я намагаюся зробити запит, який повідомляє мені, де товар можна переглянути, виходячи з налаштувань у таблиці виробника.
Наприклад, у таблиці виробника є два поля, що називаються expose_new та expose_used, кожне з яких матиме значення 1,2 або 3, щоб обмежити місце перегляду їхніх нових або використаних відео.
Коли відео додаються, їм не присвоюється значення "виставляти", і це має робитись на ходу при додаванні їх до нашого індексу залежно від значень 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). Я не впевнений, що можу додати ще один тест із AND у кожному операторі 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