0

予約システムで忙しく、2 つの時間が重複しているかどうかを確認する必要があります。これはこれまでの私のクエリで、結果が 1 より大きい場合は、その時点ですでに予約があります。行数を取得しようとすると、エラー/警告が表示されます。(下記参照) このため、私のカウントは計算されず、予約が行われます。助けてください。また、データベースで時間型 (starttime と endttime) を使用していますが、ポスト変数は文字列時間であるため、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)".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 に答える