按间隔获取记录

时间:2013-07-22 21:51:30

标签: mysql database

我有一个存储以下数据的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天都坚持这个

提前致谢

4 个答案:

答案 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_datestart_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;

enter image description here

答案 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;