MySQL select sentencia con MAYÚSCULA o SI ELSEIF? No estoy seguro de cómo obtener el resultado
Tengo dos tablas. Uno tiene información del fabricante e incluye las regiones donde pueden vender. El otro tiene sus productos a la venta. Tenemos que limitar la visibilidad del producto en función de las regiones. Esto es como Netflix tiene videos en su sistema que solo se pueden ver en todas partes (1), solo en Canadá (2), solo en EE.UU. (3).
Estoy tratando de hacer una consulta que me dice dónde se puede ver el producto en función de la configuración en la tabla del fabricante.
Para ejemplo, en la tabla manufacturer, hay dos campos llamados expose_new y expose_used cada uno de los cuales tendrá un valor de 1,2 o 3 para limitar dónde se pueden ver sus videos nuevos o usados.
Cuando se agregan los videos, no se les asigna un valor 'expose' y esto se debe hacer sobre la marcha al agregarlos a nuestro índice dependiendo de los valores expose_new o expose_used del fabricante actual.
Lo que estoy tratando de obtener es los detalles del artículo y el valor calculado para donde puede verse en función de si es nuevo o usado y la regla/valor asignado al fabricante para todos sus productos nuevos o usados. Necesito este solo dígito por producto para mostrarlo condicionalmente en una lista.
Lo siguiente no funciona, pero usted tendrá la idea de lo que estoy tratando de hacer. He intentado esto con declaraciones de CASO y la siguiente declaración INCORRECTA IF/ELSEIF.
Cualquier ayuda para depurar esto y señalarme en la dirección correcta sería 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
Aquí hay una versión de CASO que en realidad parece ejecutarse, pero siempre resulta en el primer valor sin importar lo que sucede que sea verdadero (en este caso 1). No estoy seguro de que pueda tener la adición de otra prueba con el Y en cada declaración CUANDO, pero no da un error, solo el resultado incorrecto.
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
Prueba 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-22 19:56:31
Sintaxis:
CASE value WHEN [compare_value] THEN result
[WHEN [compare_value] THEN result ...]
[ELSE result]
END
Alternativa: CASO CUANDO [condición] ENTONCES resultado [CUANDO [condición] ENTONCES el resultado ...]
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 |
+-------------------------------------------------------------+
Soy uso:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-22 15:53:40