MySQLselect与CASE或IF ELSEIF语句? 不知道如何得到结果

我有两张桌子。 一个有制造商的信息,包括他们可以出售的地区。 另一个有他们的产品出售。 我们必须根据地区来限制产品的可视性。 这就好像Netflix在他们的系统中只有在加拿大(2),美国(3)才能看到的video。

我试图做一个查询,告诉我可以根据制造商表中的设置查看产品的位置。

例如,在制造商表中,有两个名为expose_new和expose_used的字段,每个字段的值都是1,2或3,以限制其新video或已用video的位置。

添加video时,不会为其指定“曝光”值,而是根据当前制造商的Expos_new或expose_used值将其添加到索引中时即可完成。

我想要得到的是项目详细信息和计算值,可以根据是新build项目还是已使用项目以及为所有新产品或已使用产品分配给制造商的规则/值。 我需要这个单个数字在每个产品的基础上有条件地显示在列表中。

以下是行不通的,但是你会明白我正在尝试做什么。 我已经用CASE语句和下面的错误IF / ELSEIF语句尝试了这一点。

任何帮助debugging这一点,并指出我在正确的方向将不胜感激。

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版本,实际上似乎执行,但总是导致第一个值,不pipe发生了什么事情(在这种情况下是1)。 我不确定我可以在每个WHEN语句中用AND来进行另一个testing,但是不会给出错误,只是错误的结果。

 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 [condition] THEN result [WHEN [condition] THEN result …]

 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