MySQL seleccionar a instrução com a capitalização ou se for caso disso? Não sei como obter o resultado
estou tentando fazer uma consulta que me diz onde o produto pode ser visto com base nas Configurações na tabela do fabricante.
para exemplo, na tabela fabricante, existem dois campos chamados expose_new e expose_used cada um dos quais terá um valor de 1,2 ou 3 para limitar onde seus vídeos novos ou usados podem ser vistos.
Quando os vídeos são adicionados, não lhes é atribuído um valor de "exposição", o que se destina a ser feito em tempo real ao adicioná-los ao nosso índice, dependendo dos valores actuais do fabricante expose_new ou expose_used.
O que eu estou tentando obter é os detalhes do item e o valor calculado para sempre que se possa verificar com base no facto de ser novo ou utilizado e na regra/valor atribuída ao fabricante para todos os seus produtos novos ou usados. preciso deste dígito por produto para o exibir condicionalmente numa lista.
[[3]o seguinte não funciona, mas você terá a idéia do que estou tentando fazer. Eu tentei isto com as declarações do caso e a seguinte declaração errada Se/ELSEIF. Qualquer ajuda para depurar isto e apontar-me na direcção certa seria ... apreciar.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
Aqui está uma versão de caso que realmente parece executar, mas sempre resulta no primeiro valor, não importa o que acontece ser verdadeiro (neste caso 1). Não tenho a certeza se posso ter a adição de outro teste com o e em cada declaração quando, mas não dá um erro, apenas o resultado errado.
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
2 answers
Tenta esta consulta -
SELECT
t2.company_name,
t2.expose_new,
t2.expose_used,
t1.title,
t1.seller,
t1.status,
CASE status
WHEN 'New' THEN t2.expose_new
WHEN 'Used' THEN t2.expose_used
ELSE NULL
END as 'expose'
FROM
`products` t1
JOIN manufacturers t2
ON
t2.id = t1.seller
WHERE
t1.seller = 4238
Sintaxe:
CASE value WHEN [compare_value] THEN result
[WHEN [compare_value] THEN result ...]
[ELSE result]
END
Alternativa: CASE WHEN [condition] THEN result [Quando [condição] resultar ...]
mysql> SELECT CASE WHEN 2>3 THEN 'this is true' ELSE 'this is false' END;
+-------------------------------------------------------------+
| CASE WHEN 2>3 THEN 'this is true' ELSE 'this is false' END |
+-------------------------------------------------------------+
| this is false |
+-------------------------------------------------------------+
Eu sou útil:
SELECT act.*,
CASE
WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NULL) THEN lises.location_id
WHEN (lises.session_date IS NULL AND ses.session_date IS NOT NULL) THEN ses.location_id
WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NOT NULL AND lises.session_date>ses.session_date) THEN ses.location_id
WHEN (lises.session_date IS NOT NULL AND ses.session_date IS NOT NULL AND lises.session_date<ses.session_date) THEN lises.location_id
END AS location_id
FROM activity AS act
LEFT JOIN li_sessions AS lises ON lises.activity_id = act.id AND lises.session_date >= now()
LEFT JOIN session AS ses ON ses.activity_id = act.id AND ses.session_date >= now()
WHERE act.id