mysql select elseif,MySQL select语句是CASE还是IF ELSEIF?不确定如何获得结果

I have a two tables. One has manufacturer information and includes the regions where they can sell. The other has their products for sale. We have to limit visibility of the product based on the regions. This is like Netflix have videos in their system that can only be viewed Everywhere (1), only in Canada (2), only in USA (3).

I am trying to make a query that tells me where the product can be viewed based on the settings in the manufacturer table.

For example, in the manufacturer table, there are two fields called expose_new and expose_used each of which will have a value of 1,2 or 3 to limit where their new or used videos can seen.

When the videos are added, they are not assigned an 'expose' value and this is meant to be done on the fly when adding them to our index depending on the current manufacturer's expose_new or expose_used values.

What I am trying to get is the item details and the computed value for where it can be seen based on whether it is new or used and the rule/value assigned to the manufacturer for all their new or used products. I need this single digit on a per-product basis to conditionally display it in a list.

The following does not work, but you will get the idea of what I am trying to do. I have tried this with CASE statements and the following WRONG IF/ELSEIF statement.

Any help to debugger this and point me in the right direction would be appreciated.

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

Here is a CASE version that actually seems to execute but always results in the first value no matter what happens to be true (in this case 1). I am not sure that I can have the addition of another test with the AND in each WHEN statement but it does not give an error, only the wrong result.

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

解决方案

Try this query -

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值