使用sql查询

时间:2016-07-22 07:08:27

标签: php mysql date post

请帮助我解决下面的代码:

$idbo   = $_POST['idbo']; $vebo = $_POST['vebo']; 
$title = $_POST['title']; $usbo = $_POST['usbo'];   
$date1 = $_POST['date1']; $date2 = $_POST['date2'];
$cek = mysql_num_rows(mysql_query("SELECT idbo FROM boca 
       WHERE vebo='$vebo' BETWEEN date1 and date2"));
if ($cek > 0){
    echo "<script>window.alert('Date/Time and venue Already Booked...!!!')
    window.history.back()</script>";

我的问题是: - 当范围date1,date2和房间已经预订时,如何确保在startdate(date1),enddate(date2)和room(vebo)之间进行预订?

示例:

  • 已预订:

  • date1 = 2016-07-20 08:00:00

  • date2 = 2016-07-20 09:00:00

  • room = Room 1

  • 新预订:

  • date1 = 2016-07-20 08:30:00

  • date2 = 2016-07-20 09:00:00

  • room = Room 1

- 然后警告信息显示“已预订日期/时间和地点”

2 个答案:

答案 0 :(得分:0)

请检查以下查询。 此查询将检查用户的预订时间是否已预订数据库记录。

  • 用户日期1 =&#34; 2016-07-20 08:30:00&#34;不应该在所有DB date1和date2之间。
  • 用户日期2 =&#34; 2016-07-20 09:30:00&#34;不应该在所有DB date1和date2之间。
    • 所有DB date1不应位于用户&#39; 2016-07-20 08:30:00&#39;和&#39; 2016-07-20 09:30:00&#39;。
    • 所有DB date2不应位于用户&#39; 2016-07-20 08:30:00&#39;和&#39; 2016-07-20 09:30:00&#39;。

如果用户date1和date2符合房间的所有条件,那么只允许预订该房间。

SELECT idbo FROM boca WHERE vebo='$vebo' ('2016-07-20 08:30:00' NOT BETWEEN date1 AND date2) and ('2016-07-20 09:00:00' NOT BETWEEN date1 AND date2) and (date1 NOT BETWEEN '2016-07-20 08:30:00' AND '2016-07-20 09:00:00') and (date2 NOT BETWEEN '2016-07-20 08:30:00' AND '2016-07-20 09:00:00')

答案 1 :(得分:0)

如果同一地点有记录在新记录结束之前开始并在新记录开始之后结束,则会发生冲突。

换句话说,如果一个人在另一个人结束之后开始,或者在另一个人开始之前结束,那么这不是冲突。

所以这个查询返回所有冲突:

SELECT idbo
FROM boca
WHERE vebo = :vebo AND date1 <= :date2 AND date2 >= :date1

如果您不想收到所有冲突,可以添加LIMIT 1