2012-04-07 42 views
1

我有兩個表,customerreservationscustomerreservations都包含稱爲customerID的行。 reservations包含名爲resStart和resEnd的兩列,其中只有日期(YYYY-MM-DD,這是我將用於建立$ todaysdate變量的確切格式。MySQL/PHP:來自兩個表的SELECT中的多個AND/OR標籤

我想加入這兩個列生成一個單列customerID以及其他信息的表格,但前提是$ todaysdate在兩個日期之間或之間。注意:$ todaysdate是在我的文檔中其他地方建立的,可以是來自url的_GET(即.day.php?date = 2012-07-04)或者如果沒有成立,今天的日期與日期('YM-D')。這部分代碼不是我的問題所在,我敢肯定。我在想在定義mySql查詢中的信息時出現語法錯誤。

以下是我正在處理的內容。一個小解釋:我用Javascript包裝PHP代碼,這裏的目標是爲每個resStart生成一個單獨的DIV。 Javascript正在獲取偏移變量以添加到每個DIV的CSS中,因此每個DIV都會自動相對於它所代表的設備進行放置。

<?php 
$getreservations = mysql_query(" 
SELECT * FROM customer LEFT JOIN reservations WHERE (customer.customerID = reservations.customerID) 
AND ($todaysdate = resStart OR $todaysdate >= resStart AND $todaysdate <= resEnd) 
") 

or die(mysql_error()); 

while(false !== ($row = mysql_fetch_assoc($getreservations))) 
{ 
    $nameLast = $row["nameLast"]; 
    $nameFirst = $row["nameFirst"]; 
    $customerID = $row["customerID"]; 
    $equipID = $row["equipID"]; 
    $resStart = $row["resStart"]; 
    $resEnd = $row["resEnd"]; 
    $timeStart = $row["timeStart"]; 
    $timeEnd = $row["timeEnd"]; 
    $result = strtotime($timeStart); 
     $minute = date("i", $result); 
     $second = date("s",$result); 
     $hour = date("H", $result); 

    if(true) { 
?> 
    <script language='javascript'> 
    var left = $('#<?php echo("$hour$minute");?>').offset().left; 
    var top = $('#<?php echo $equipID;?>').offset().top; 

$(document).ready(function() { 
    $('#<?php echo ("$customerID$equipID");?>).css({ 'left': (pos.left + width) + 'px', 'top': (pos.top + top) + 'px' });  
} 
    </script> 

<?php } 
echo ("<div class='resContainer $customerID$equipID' id=$customerID$equipID>$nameLast, $nameFirst</div> "); 

    } ?> 

回答

1
SELECT * FROM customer c INNER JOIN reservations r USING(customerID) WHERE '{$todaysdate}' BETWEEN r.resStart AND r.resEnd 

但是,您也可以在SQL中的 「todaysdate」:DATE(NOW()),並聲明將是:

SELECT * FROM customer c INNER JOIN reservations r USING(customerID) WHERE DATE(NOW()) BETWEEN r.resStart AND r.resEnd 

編輯:加引號$todaysdate變量,以避免混淆

+0

首先,我不得不放棄'c'和'r'以及'c.'和'r.'。我認爲這是一種簡寫形式,但它讓我感到困惑,而且還沒有在我的服務器上工作。 其次,當直接查詢SQL時,顯然沒有定義$ todaysdate變量,並用日期(即2012-07-04)替換爲n返回錯誤。添加引號可以阻止錯誤(即'2012-07-04') 我想我會留下這些筆記,以供任何人稍後使用,以達到相同的目的。否則,這工作完美,非常感謝你! – 2012-04-08 22:39:58

+0

Right,@BryanGuidicianni,'c'和'r'是簡寫(表別名),如果它們是在查詢中定義的,則不能再使用原始表名,並且只能使用別名。關於日期 - 你也可以不用引號 - 如果你格式化沒有破折號的日期(只是20120704作爲一個數字) – poncha 2012-04-09 08:37:52

0

請嘗試以下查詢:

SELECT * FROM customer 
LEFT JOIN reservations on customer.customerID = reservations.customerID 
WHERE curdate() BETWEEN r.resStart AND r.resEnd