我的用户在datetime [html form]字段中输入两个值:: book_from fe 2015-09-15 16:44:39 book_to 2015-09-17 16:44:39然后查询应检查提供的日期是否为与现有的预订相冲突。
我的查询看起来如下 - 但我觉得没有办法让它起作用。
A raw php code -> "SELECT * FROM `tbl_rezerwacje` WHERE '".$_POST['book_from']."' between `date_from` and `date_to` AND `nr_sali` = '".$place."'";
SQL dump -> SELECT * FROM `tbl_rezerwacje` WHERE '2015-09-15 16:44:39' between `date_from` and `date_to` AND `nr_sali` = 'F115'
答案 0 :(得分:1)
WHERE
期望在其后面有一个列名,而不是一个值
此外between
也不起作用。
编辑:草莓的解释
考虑以下
1 2 3 4 5 6 7 8 9
A |---|
B |-----|
C |----|
D |-----------|
重叠的测试比Szenis似乎更欣赏。
事件B与事件A重叠,因为事件B在事件A结束之前开始,并在事件A开始之后结束。
事件C不会与事件B重叠,因为事件B在事件B开始后结束,但它在事件B结束后开始
事件D与所有其他事件重叠,因为事件D在所有其他事件结束之前开始,并在所有其他事件开始之后结束。
所以对重叠的测试很简单:
y_start < x_end AND y_end > x_start
答案
感谢草莓,答案比之前要短得多
SELECT *
FROM `your_table`
WHERE (`date_from` < end_date AND
`date_to` > start_date) AND
`nr_sali` = your_book_id
如果找到记录,则该书在指定日期内不可用。
答案 1 :(得分:0)
$ from_date - &gt;用户输入开始日期
$ to_date - &gt;用户输入结束日期
&#39;启动&#39; - &GT; DB列用于开始日期
&#39;端&#39; - &GT;结束日期的DB列
ANSWER
SELECT *
来自table_reservations
在哪里start
&lt; &#34; $ TO_DATE&#34;和
end
&gt; &#34; $ FROM_DATE&#34;
如果记录与此查询匹配,则它与另一个预订重叠(您必须验证用户的日期范围是否有效 - &gt; $from_date < $to_date
)