在where子句中选择Condition

时间:2017-03-13 12:54:19

标签: mysql

我有一个名为package的表格:

id  name    validity
1   Free     NULL
2   Basic    90
4   Featured 80 
5   Premium  70

我还有另一个表格广告

id  posted_on   title package_id 
1   2016-09-29  test   1
2   2015-09-29  test2  2
3   2016-07-29  test3  4

我有一个类似的查询:

SELECT * FROM ads AS ad WHERE (SELECT datediff(curdate(), posted_on) AS datecount) <= 180

我想从表180

中获取此package

喜欢

if (package_id  == 2){
  instead of 180 it will be 90 fetched form package table    
} 

有没有办法通过单个SQL查询来实现这一目的

2 个答案:

答案 0 :(得分:1)

查询的意图是否使用包中的有效性值,如果是,那么连接将非常适合您...

select ads.*, package.name, package.validity
  from ads
  join package on (   package.id=ads.package_id
                  and (  datediff(curdate(),ads.posted_on)<=package.validity
                      or package.validity is null))

答案 1 :(得分:0)

首先:我没有收到您的查询。为什么使用子查询而不是这样做:

SELECT * 
FROM ads
WHERE datediff(curdate(), posted_on) <= 180

然后,改变方式:

SELECT * 
FROM ads 
WHERE 
    datediff(curdate(), posted_on) <= case when package_id = 2 then 90 else 180 end

我删除了答案中的所有别名,因为它们在您的查询中都没有使用。