MySQL / PHP:SELECT中的多个AND / OR标记来自两个表

时间:2012-04-07 22:27:34

标签: php mysql

我有两张桌子customerreservationscustomerreservations都包含一行名为customerID的行。 reservations包含两个名为resStart和resEnd的列,其中只包含日期(YYYY-MM-DD,这是我将用于建立$ todaysdate变量的确切格式。

我想加入这两个来制作一个包含customerID单列的表以及其他信息,但前提是$ todaysdate落在两个日期之间。注意:$ todaysdate在我的文档中的其他位置建立为来自url的_GET(即day.php?date = 2012-07-04),或者如果没有建立,则今天的日期为日期('Y-m-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> ");

    } ?>

3 个答案:

答案 0 :(得分: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变量周围添加引号以避免混淆

答案 1 :(得分:1)

  1. 首先直接在数据库中尝试查询。您将获得正确的错误代码和问题所在的信息。
  2. 使用JOIN时,应使用USING或ON(table1.field = table2.field)指定连接条件。 (参考文档:http://dev.mysql.com/doc/refman/5.0/en/join.html

答案 2 :(得分:0)

尝试以下查询:

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