这是我的问题:
我的 mysql 数据库中有一个表,其中包含一些产品,它有两列称为“date_from”和“date_to”,它们确定产品处于活动状态的时间段。
在我的网站上有一个表单,管理员可以在其中选择两个日期时间值,如果产品的活动期与管理员选择的跨度相交,则页面会更新产品列表。
这是我的查询,我用它来实现我想要的:
$sql="SELECT * FROM presents WHERE (date_from>".$date_from." AND date_to<".$date_to.") OR (date_from>".$date_from." AND date_to>".$date_to.") OR (date_from<".$date_from." AND date_to>".$date_to.") OR (date_from<".$date_from." AND date_to<".$date_to.")";
我得到了这个错误:
mysql说:MySql错误号:1064 MySql错误说明:你的SQL语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '.26 附近使用的正确语法。12:11:43 和 date_to<2012.07.30。12:11:46) 或 (date_from>2012.07.26. 12:11:' 在第 1 行
有任何想法吗?
*编辑
我按照建议更改了查询,并为变量添加了单引号。现在我没有收到错误,但查询似乎没有做它应该做的 - 产品列表保持不变......现在是查询:
$sql="SELECT * FROM presents WHERE (date_from>'".$date_from."' AND date_to<'".$date_to."') OR (date_from>'".$date_from."' AND date_to>'".$date_to."') OR (date_from<'".$date_from."' AND date_to>'".$date_to."') OR (date_from<'".$date_from."' AND date_to<'".$date_to."')";
假设我的表中有这一行:
ID 名称 date_from date_to
1 次测试 2012-07-24 16:40:00 2012-07-31 16:40:00
我需要所有这些时间段来返回该行:
2012-07-23 16:40:00 至 2012-08-01 16:40:00
2012-07-23 16:40:00 至 2012-07-28 16:40:00
2012-07-26 16:40:00 至 2012-07-28 16:40:00
2012-07-26 16:40:00 至 2012-08-01 16:40:00