【发布时间】:2011-12-22 07:31:38
【问题描述】:
我有两张桌子。一个有制造商信息,包括他们可以销售的地区。另一个有他们的产品出售。我们必须根据地区限制产品的可见性。这就像 Netflix 的系统中的视频只能在任何地方观看 (1)、仅在加拿大 (2)、仅在美国 (3)。
我正在尝试根据制造商表中的设置进行查询,告诉我可以在哪里查看产品。
例如,在manufacturer 表中,有两个名为expose_new 和expose_used 的字段,每个字段的值都为1,2 或3,以限制可以看到新视频或旧视频的位置。
添加视频时,不会为其分配“曝光”值,这意味着在将它们添加到我们的索引时根据当前制造商的 Expose_new 或 Expose_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
【问题讨论】:
-
Here 是 mysql 上非常好的资源 if else, case 语句。都用例子来解释。