Ich habe zwei Tische. Man hat Herstellerinformationen und schließt die Regionen ein, in denen sie verkaufen können. Die anderen haben ihre Produkte zum Verkauf. Wir müssen die Sichtbarkeit des Produkts basierend auf den Regionen einschränken. Dies ist so, als hätte Netflix Videos in seinem System, die nur überall (1), nur in Kanada (2) und nur in den USA (3) angezeigt werden können.
Ich versuche, eine Abfrage durchzuführen, die mir anhand der Einstellungen in der Herstellertabelle mitteilt, wo das Produkt angezeigt werden kann.
In der Herstellertabelle gibt es beispielsweise zwei Felder mit den Namen expose_new und expose_used, die jeweils den Wert 1,2 oder 3 haben, um zu begrenzen, wo ihre neuen oder verwendeten Videos angezeigt werden.
Wenn die Videos hinzugefügt werden, wird ihnen kein "Expose" -Wert zugewiesen. Dies soll im laufenden Betrieb erfolgen, wenn sie in Abhängigkeit von den expose_new- oder expose_used-Werten des aktuellen Herstellers zu unserem Index hinzugefügt werden.
Was ich versuche zu erhalten, sind die Artikeldetails und der berechnete Wert, für den sie angezeigt werden können, basierend darauf, ob es neu oder gebraucht ist, und die Regel / der Wert, die dem Hersteller für alle neuen oder gebrauchten Produkte zugewiesen wurden. Ich benötige diese einzelne Ziffer pro Produkt, um sie bedingt in einer Liste anzuzeigen.
Das Folgende funktioniert nicht, aber Sie werden eine Vorstellung davon bekommen, was ich versuche zu tun. Ich habe dies mit CASE-Anweisungen und der folgenden WRONG IF / ELSEIF-Anweisung versucht.
Jede Hilfe, um dies zu debuggen und mich in die richtige Richtung zu weisen, wäre dankbar.
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
Hier ist eine CASE-Version, die tatsächlich ausgeführt zu werden scheint, aber immer den ersten Wert ergibt, unabhängig davon, was wahr ist (in diesem Fall 1). Ich bin nicht sicher, ob ich in jeder WHEN-Anweisung einen weiteren Test mit dem UND hinzufügen kann, aber es gibt keinen Fehler, nur das falsche Ergebnis.
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