J'ai deux tables. L'une contient des informations sur les fabricants et inclut les régions où ils peuvent vendre. L'autre contient leurs produits à vendre. Nous devons limiter la visibilité du produit en fonction des régions. C'est comme Netflix qui a des vidéos dans leur système qui ne peuvent être visionnées qu'partout (1), uniquement au Canada (2), uniquement aux États-Unis (3).
Je suis en train d'écrire une requête qui me dit où le produit peut être vu en fonction des paramètres de la table du fabricant.
Par exemple, dans la table du fabricant, il y a deux champs appelés expose_new et expose_used, chacun ayant une valeur de 1, 2 ou 3 pour limiter où leurs nouvelles ou vidéos d'occasion peuvent être vues.
Lorsque les vidéos sont ajoutées, elles ne se voient pas attribuer de valeur "expose", et cela doit être fait en temps réel lors de leur ajout à notre index en fonction des valeurs actuelles de "expose_new" ou "expose_used" du fabricant.
Ce que j'essaie d'obtenir, ce sont les détails de l'élément et la valeur calculée pour l'endroit où il peut être vu en fonction du fait que c'est nouveau ou d'occasion et de la règle / valeur attribuée au fabricant pour tous ses produits neufs ou d'occasion. J'ai besoin de ce chiffre unique sur une base par produit pour l'afficher conditionnellement dans une liste.
Le code suivant ne fonctionne pas, mais vous aurez une idée de ce que j'essaie de faire. J'ai essayé cela avec des déclarations CASE et la déclaration IF / ELSEIF suivante qui est incorrecte.
Toute aide pour déboguer ceci et me pointer dans la bonne direction serait appréciée.
SELECT
t2.company_name,
t2.expose_new, // 1,2 or 3
t2.expose_used, // 1,2 or 3
t1.title,
t1.seller,
t1.status, //peut être nouveau ou d'occasion
(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
Voici une version avec CASE qui semble en fait s'exécuter mais donne toujours la première valeur, peu importe ce qui est vrai (dans ce cas, 1). Je ne suis pas sûr de pouvoir ajouter un autre test avec le AND dans chaque instruction WHEN, mais cela ne donne pas une erreur, seulement le mauvais résultat.
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