[英]MySQL select statement with CASE or IF ELSEIF? Not sure how to get the result
我有两张桌子。 一个有制造商信息,包括他们可以销售的地区。 另一个有他们的产品出售。 我们必须根据区域限制产品的可见性。 这就像 Netflix 系统中的视频只能在任何地方 (1)、仅在加拿大 (2)、仅在美国 (3) 观看。
我正在尝试进行查询,根据制造商表中的设置告诉我在哪里可以查看产品。
例如,在制造商表中,有两个字段,称为expose_new 和expose_used,每个字段的值都为1,2 或3,以限制可以看到他们的新视频或使用过的视频的位置。
添加视频时,不会为它们分配“expose”值,这意味着在将它们添加到我们的索引时根据当前制造商的 Exposure_new 或 Exposure_used 值即时完成。
我想要得到的是物品的详细信息和计算值,根据它是新的还是旧的,以及分配给制造商的所有新产品或旧产品的规则/价值,在哪里可以看到它的计算值。 我需要在每个产品的基础上使用这个单个数字来有条件地将其显示在列表中。
以下内容不起作用,但您会了解我正在尝试做什么。 我已经用 CASE 语句和以下 WRONG IF/ELSEIF 语句尝试过这个。
任何帮助调试并指出我正确方向的帮助将不胜感激。
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
这是一个 CASE 版本,它实际上似乎在执行,但无论发生什么情况都为真(在本例中为 1),它总是产生第一个值。 我不确定我是否可以在每个 WHEN 语句中添加另一个带有 AND 的测试,但它不会给出错误,只会给出错误的结果。
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
试试这个查询 -
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
句法:
CASE value WHEN [compare_value] THEN result
[WHEN [compare_value] THEN result ...]
[ELSE result]
END
替代方案: CASE WHEN [条件] THEN 结果 [WHEN [条件] THEN 结果 ...]
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 |
+-------------------------------------------------------------+
我正在使用:
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
另一种方法是使用嵌套的 IF 语句。 假设您有公司表并且您想计算其中的记录数。 示例查询将是这样的
SELECT IF(
count(*) > 15,
'good',
IF(
count(*) > 10,
'average',
'poor'
)
) as data_count
FROM companies
当第一个 IF 条件失败时,这里第二个 IF 条件起作用。 所以 IF 语句的示例语法将是IF ( CONDITION, THEN, ELSE)。 希望它可以帮助某人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.