我有一个存储以下数据的MySQL表:
id_event INT(10)
start_date DATE()
end_date DATE()
我的目标是显示所有在日期间隔之间包含的id_events:$start
和$sto
到目前为止我已经尝试过了:
SELECT * FROM events WHERE $start >= start_date AND $end <= end_date;
但问题是,某些事件可能会在输入$start
之前开始,并在$end
之后结束并且不会显示。
我很确定它可能很容易,但我最近2天都坚持这个
提前致谢
答案 0 :(得分:0)
尝试
SELECT * FROM events WHERE start_date >= '$start' AND end_date <= '$end';
答案 1 :(得分:0)
首先,您需要确保$start
和$end
格式正确。它应该是:'YYYY-mm-dd'
,例如:'2013-07-22'
。
其次,你的逻辑是有缺陷的。 $start >= start_date
与start_date <= $start
相同。这意味着之前的任何内容输入日期为$start
。
最后,您需要在查询中引用您的值,您的日期应该是字符串。
SELECT * FROM events WHERE start_date >= '$start' AND end_date <= '$end';
答案 2 :(得分:0)
试试这个:
SELECT * FROM events
WHERE $start <= end_date and $end >= start_date;
答案 3 :(得分:0)
这很大程度上取决于$ start和$ end。 我假设这来自PHP,对吧?
我认为你需要首先将PHP变量中的任何内容转换为SQL DATE类型,使用STR_TO_DATE函数(http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date)
然后,使用正确的格式,您运行类似于以下内容:
SELECT * FROM events WHERE STR_TO_DATE('$start','%d-%m-%Y') >= start_date AND STR_TO_DATE('$end','%d-%m-%Y') <= end_date;