Mysql 查询以选择有或没有日期的行

Posted

技术标签:

【中文标题】Mysql 查询以选择有或没有日期的行【英文标题】:Mysql Query to select rows with or without dates 【发布时间】:2017-09-21 22:07:15 【问题描述】:

我想选择基于今天日期的行,其中包含开始日期和到期日期列,甚至是没有日期值的行。所以

$query=mysql_query("SELECT * FROM discounts where '".date('Y-m-d')."' >= coupon_start_date AND '".date('Y-m-d')."' <= coupon_expiry_date
UNION SELECT * FROM ecwid_discounts where '".date('Y-m-d')."' >= coupon_start_date AND coupon_expiry_date is NULL union SELECT * FROM ecwid_discounts where coupon_start_date is NULL AND '".date('Y-m-d')."' <= coupon_expiry_date union SELECT * FROM ecwid_discounts where coupon_start_date is NULL AND coupon_expiry_date is null");

我想确认这个查询是否正确,或者有什么更好的方法可以简单地重写这个查询。

任何帮助家伙

【问题讨论】:

警告:如果您只是学习 php,请不要学习过时的 mysql_query 接口。这很糟糕,已在 PHP 7 中删除。PDO is not hard to learn 之类的替代品和PHP The Right Way 之类的指南有助于解释最佳实践。确保确保您的用户参数是properly escaped,否则您最终会得到严重的SQL injection bugs。 你可以使用OR,所以你不需要UNION 【参考方案1】:

使用这个查询:

$query=mysql_query("SELECT * FROM discounts where '".date('Y-m-d')."' >= coupon_start_date AND '".date('Y-m-d')."' <= coupon_expiry_date
UNION SELECT * FROM ecwid_discounts where '".date('Y-m-d')."' >= coupon_start_date AND '".date('Y-m-d')."' <= coupon_expiry_date OR '".date('Y-m-d')."' >= coupon_start_date AND coupon_expiry_date is NULL OR coupon_start_date is NULL AND '".date('Y-m-d')."' <= coupon_expiry_date OR coupon_start_date is NULL AND coupon_expiry_date is null");

【讨论】:

以上是关于Mysql 查询以选择有或没有日期的行的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询选择年份在两个日期之间的行

查询有或无日期约束的事件序列

MySQL选择日期的行

如何实现子查询以选择与三个主题中的两个主题匹配的行?

MySql 选择日期相差 30 分钟的行

MySQL:按日期选择前 5 个和后 5 个条目,1 个查询,没有子查询