我正在编写一个PHP应用程序,显示特定时间范围内的促销活动。
在应用程序中,您可以设置开始日期和结束日期。在某些时候可能会出现没有促销活动的时间。
在我的数据库中,我正在存储
date_from (MySQL DATE - eg 2011-03-05) //start date
和
date_to (MySQL DATE - eg 2011-03-08) //end date
用户可以设置多个促销,自动切换到下一个日期。
根据上述示例日期,优惠将在5日,6日和7日显示。
我想我需要的东西是
SELECT * FROM promotions WHERE date_from > $current_date
但我如何确保它不会在8日显示,然后(如果有促销从8日开始)显示新的。
修改
Krtek建议的这个SQL似乎不起作用:
SELECT * FROM promotions WHERE 2011-03-08 BETWEEN date_from AND date_to LIMIT 1
该行包含以下数据date_from ='2011-03-01'和date_to ='2011-03-09'但尚未返回任何内容
由于
答案 0 :(得分:4)
尝试这样的事情:
SELECT * FROM promotions WHERE '$current_date' BETWEEN date_from AND date_to
编辑:在日期周围添加引号,它应该更好地工作。
答案 1 :(得分:0)
SELECT * FROM promotions WHERE date_from > $current_date and date_to < $current_date ;
如果您想去基于日期的日期,查询将变为:
SELECT * FROM promotions WHERE DATE(date_from) > $current_date and DATE(date_to) < $current_date ;
答案 2 :(得分:0)
SELECT * FROM promotions WHERE date_from <= $current_date and date_to >= $current_date
因为人们通常希望它在指定的日期开始并结束并包括指定的日期。
但是krtek的答案更好。
答案 3 :(得分:0)
你在找这样的东西吗?
SELECT * FROM `promotions` WHERE date_from between $date_from and $date_to
答案 4 :(得分:0)
请不要在构建SQL查询时使用字符串插值。你将后悔。
$stmt = mysqli_prepare($link, "SELECT * FROM promotions WHERE ? BETWEEN date_from AND date_to");
mysqli_stmt_bind_param($stmt, 's', $current_date);
mysqli_stmt_execute($stmt);