我有一个名为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查询来实现这一目的
答案 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
我删除了答案中的所有别名,因为它们在您的查询中都没有使用。