Dichiarazione di selezione MySQL con CASE o IF ELSEIF? Non sai come ottenere il risultato

Ho due tavoli. Uno ha informazioni sul produttore e include le regioni in cui possono vendere. L’altro ha i loro prodotti in vendita. Dobbiamo limitare la visibilità del prodotto in base alle regioni. Questo è come se Netflix avesse dei video nel proprio sistema che possono essere visualizzati solo Ovunque (1), solo in Canada (2), solo negli Stati Uniti (3).

Sto cercando di creare una query che indichi dove è ansible visualizzare il prodotto in base alle impostazioni nella tabella del produttore.

Ad esempio, nella tabella del produttore, ci sono due campi chiamati expose_new ed expose_used ognuno dei quali avrà un valore di 1,2 o 3 per limitare dove possono essere visti i loro video nuovi o usati.

Quando i video vengono aggiunti, non viene assegnato loro un valore ‘expose’ e questo è pensato per essere fatto al volo quando li aggiungi al nostro indice a seconda dei valori expose_new o expose_used del produttore corrente.

Quello che sto cercando di ottenere è il dettaglio dell’articolo e il valore calcolato per dove può essere visto in base al fatto che sia nuovo o usato e la regola / valore assegnato al produttore per tutti i loro prodotti nuovi o usati. Ho bisogno di questa singola cifra su base per prodotto per visualizzarla in modo condizionale in un elenco.

Quanto segue non funziona, ma avrai l’idea di ciò che sto cercando di fare. Ho provato questo con le istruzioni CASE e la seguente istruzione WRONG IF / ELSEIF.

Sarebbe gradito qualsiasi aiuto per debuggerlo e indicarmi la giusta direzione.

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 

Ecco una versione di CASE che sembra effettivamente eseguirsi ma risulta sempre nel primo valore, indipendentemente da ciò che accade essere vero (in questo caso 1). Non sono sicuro di avere l’aggiunta di un altro test con l’AND in ogni istruzione WHEN, ma non dà un errore, solo il risultato sbagliato.

 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