0

我正忙于预订系统,需要检查 2 次是否重叠。到目前为止,这是我的查询,如果结果 > 1,那么在此期间已经有预订。尝试获取行数时出现错误/警告。(见下文)因此,我的计数不计算在内,并且进行了预订。请帮忙。另外,我在我的数据库中使用时间类型(starttime 和 endttime),但 post 变量是字符串时间,因此我使用 strtotime()。请看下面的错误:

$mystarttime = '07:00:00';
$myendtime = '08:00:00';
$sql    = "SELECT * FROM $tbl_name2 WHERE
            (
            (strtotime($mystarttime) < starttime AND strtotime($myendtime) > starttime)
            OR
            (strtotime($mystarttime) > starttime AND strtotime($myendtime) < endtime)
            OR
            (strtotime($mystarttime) > starttime AND strtotime($mystarttime) < endtime)
            OR
            (starttime < strtotime($mystarttime)  AND  starttime > strtotime($myendtime))
            OR
            (starttime > strtotime($mystarttime) AND endtime < strtotime($myendtime))
            OR
            (starttime > strtotime($mystarttime) AND endtime < strtotime($mystarttime))
            OR
            (strtotime($mystarttime) = starttime)
            OR
            (strtotime($mystarttime) = endtime)
            OR
            (strtotime($myendtime) = starttime)
            OR
            (strtotime($myendtime) = endtime)
            OR
            (starttime = strtotime($mystarttime))
            OR
            (starttime = strtotime($myendtime))
            OR
            (endtime = strtotime($mystarttime))
            OR
            (endtime = strtotime($myendtime))
            )
            AND
            hairdresserid = $myhairdresserid 
            AND
            date = $mydate";

            $result = mysql_query($sql);

            //Mysql_num_row is counting table row
            $count  = mysql_num_rows($result)or die('Query failed: ' . mysql_error() . $sql); 

我收到的警告信息:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /xxx/xxx/xxx/xxx/makebooking.php on line 165

Query failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':00:00) < starttime AND strtotime(08:00:00) > starttime) OR ' at line 3SELECT * FROM bookings WHERE ( (strtotime(07:00:00) < starttime AND strtotime(08:00:00) > starttime) OR (strtotime(07:00:00) > starttime AND strtotime(08:00:00) < endtime) OR (strtotime(07:00:00) > starttime AND strtotime(07:00:00) < endtime) OR (starttime < strtotime(07:00:00) AND starttime > strtotime(08:00:00)) OR (starttime > strtotime(07:00:00) AND endtime < strtotime(08:00:00)) OR (starttime > strtotime(07:00:00) AND endtime < strtotime(07:00:00)) OR (strtotime(07:00:00) = starttime) OR (strtotime(07:00:00) = endtime) OR (strtotime(08:00:00) = starttime) OR (strtotime(08:00:00) = endtime) OR (starttime = strtotime(07:00:00)) OR (starttime = strtotime(08:00:00)) OR (endtime = strtotime(07:00:00)) OR (endtime = strtotime(08:00:00)) ) AND hairdresserid = 12 AND date = 2012-01-25

编辑#1:

Query failed: SELECT * FROM bookings WHERE ( (1359118800 < starttime AND 1359122400 > starttime) OR (1359118800 > starttime AND 1359122400 < endtime) OR (1359118800 > starttime AND 1359118800 < endtime) OR (starttime < 1359118800 AND starttime > 1359122400) OR (starttime > 1359118800 AND endtime < 1359122400) OR (starttime > 1359118800 AND endtime < 1359118800) OR (1359118800 = starttime) OR (1359118800 = endtime) OR (1359122400 = starttime) OR (1359122400 = endtime) OR (starttime = 1359118800) OR (starttime = 1359122400) OR (endtime = 1359118800) OR (endtime = 1359122400) ) AND hairdresserid = 12 AND date = 2012-01-25

编辑#2:

Query failed: SELECT * FROM bookings WHERE ( (1359118800 < starttime AND 1359122400 > starttime) OR (1359118800 > starttime AND 1359122400 < endtime) OR (1359118800 > starttime AND 1359118800 < endtime) OR (starttime < 1359118800 AND starttime > 1359122400) OR (starttime > 1359118800 AND endtime < 1359122400) OR (starttime > 1359118800 AND endtime < 1359118800) OR (1359118800 = starttime) OR (1359118800 = endtime) OR (1359122400 = starttime) OR (1359122400 = endtime) OR (starttime = 1359118800) OR (starttime = 1359122400) OR (endtime = 1359118800) OR (endtime = 1359122400) ) AND hairdresserid = 12 AND date = 2012-01-25

编辑#3:

Query failed: SELECT * FROM bookings WHERE ( ('07:00:00' < starttime AND '08:00:00' > starttime) OR ('07:00:00' > starttime AND '08:00:00' < endtime) OR ('07:00:00' > starttime AND '07:00:00' < endtime) OR (starttime < '07:00:00' AND starttime > '08:00:00') OR (starttime > '07:00:00' AND endtime < '08:00:00') OR (starttime > '07:00:00' AND endtime < '07:00:00') OR ('07:00:00' = starttime) OR ('07:00:00' = endtime) OR ('08:00:00' = starttime) OR ('08:00:00' = endtime) OR (starttime = '07:00:00') OR (starttime = '08:00:00') OR (endtime = '07:00:00') OR (endtime = '08:00:00') ) AND hairdresserid = 12 AND date = 2012-01-25

编辑#4:

Query failed: SELECT * FROM bookings WHERE ( ('07:00:00' < starttime AND '08:00:00' > starttime) OR ('07:00:00' > starttime AND '08:00:00' < endtime) OR ('07:00:00' > starttime AND '07:00:00' < endtime) OR (starttime < '07:00:00' AND starttime > '08:00:00') OR (starttime > '07:00:00' AND endtime < '08:00:00') OR (starttime > '07:00:00' AND endtime < '07:00:00') OR ('07:00:00' = starttime) OR ('07:00:00' = endtime) OR ('08:00:00' = starttime) OR ('08:00:00' = endtime) OR (starttime = '07:00:00') OR (starttime = '08:00:00') OR (endtime = '07:00:00') OR (endtime = '08:00:00') ) AND hairdresserid = 12 AND date = '2012-01-25'
4

2 回答 2

2

mysql中没有strtotime函数,所以你必须执行以下操作

从查询中删除所有的strtotime并将其添加到$mystarttime( $mystarttime = strtotime('07:00:00');) 或替换每个出现的strtotime($myendtime)with ".strtotime($myendtime)."

我认为您可以更轻松地编写查询,您可以尝试以下操作:

"SELECT * FROM " . $tbl_name2 . " WHERE 
(starttime BETWEEN " . $mystarttime . " AND " . $myendtime . ") 
AND 
(endtime BETWEEN "    . $mystarttime . " AND " . $myendtime . ") 
AND 
hairdresserid = " . $myhairdresserid . "
AND
date = '" . $mydate . "';"
于 2013-01-25T09:11:33.503 回答
1

strtotime是一个 PHP 函数。不能用 SQL 语句编写。相反,连接它。

如果您的字段starttime整数数据类型,我会这样做:

$sql = "SELECT * FROM ".$tbl_name2."
        WHERE startime > '".strtotime($mystarttime)."' 
        AND starttime < '".strtotime($myendtime)."' 
        AND date = '".$mydate."'";  

如果您的字段starttime时间数据类型(例如,00:00:00),我会这样做:

$sql = "SELECT * FROM ".$tbl_name2."
        WHERE startime > '".$mystarttime."' 
        AND starttime < '".$myendtime."' 
        AND date = '".$mydate."'";

关于 PHP 中的字符串引号,更好的做法是在连接字符串时使用单引号并在内部使用双引号。单引号字符串在运行时可能更快,因为它们不需要被解析。

$sql = 'SELECT * FROM '.$tbl_name2.'
        WHERE startime > "'.$mystarttime.'"
        AND starttime < "'..$myendtime.'"
        AND date = "'.$mydate.'"';
于 2013-01-25T09:15:49.850 回答