我有一个名为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我想从表package中获取此180
喜欢
if (package_id == 2){
instead of 180 it will be 90 fetched form package table
} 有没有办法通过单个SQL查询来实现这一点
发布于 2017-03-13 21:57:54
查询的目的是使用包中的有效性值,如果是,那么连接将非常适合您……
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))发布于 2017-03-13 20:57:21
首先:我不明白你的问题。为什么使用子查询,而不是直接这样做:
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我删除了答案中的所有别名,因为它们无论如何都不会在您的查询中使用。
https://stackoverflow.com/questions/42764173
复制相似问题