难以使用PHP文档中的SQL查询数据库中的2个不同表

时间:2012-04-02 16:04:55

标签: php mysql sql pear

我的PHPMyAdmin中有一个数据库,它包含2个表:

  1. tennisCourts
          courtID
          courtName
          bookingFee

  2. tenniscourts_Availability
          courtID
         court_dateBooked

  3. 我正在使用PEAR存储库编写PHP程序,我正在努力创建允许我执行的代码:

    仅当用户选择的日期尚未被其他用户使用时,请选择用户选择的法院预约日期并显示来自tennisCourts表的所有字段。我在tenniscourts_Availability表中输入了虚拟数据。

    SELECT and DISPLAY all fields 
    from the tennisCourts table (courtID, courtName, bookingFee) 
    WHERE court_dateBooked = $CHOSEN_BOOKING_DATE 
       *($_GET is used here to retrieve the booking date enetered by 
         the user in a seperate html document.)
    

    这是我目前的代码: -

    $db_table_tennisCourts = "tennisCourts";
    $court_ID = "courtID";
    $court_Name = "courtName";
    $booking_Fee = "bookingFee";
    
    
    $db_table_tenniscourts_Availability = "tenniscourts_Availability";
    $court_ID = "courtID";
    $court_dateBooked = "court_dateBooked";
    
    $CHOSEN_BOOKING_DATE =  $_GET['user_dateField']; //GET's input data from user form in my other html document.
    
    
    $database->setFetchMode(MDB2_FETCHMODE_ORDERED);
    
    
    $myQuery = "SELECT $court_ID , $court_dateBooked FROM $db_table_ WHERE $CHOSEN_BOOKING_DATE != $court_dateBooked";
    
    $queryResult =& $db->query($myQuery);
    
    if (PEAR::isError($queryResult)) {
        die($queryResult->getMessage());
    }
    
    
    while ($Col =& $queryResult->fetchRow()) {
    
    echo $queryResult[0].' ';   //shows courtID 
    
        $queryResult[1];
        list($y,$m,$d)=explode('-',$queryResult[1]);
    echo $d.'/'.$m.'/'.$y.'/<br/>';
    }
    
    ?>
    

    我还是PHP和SQL的新手,请原谅我,如果我还没弄清楚的话。我一直在网上研究,各种消息来源说使用SQL UNION OR JOIN?有人可以请教我如何在我的场景中使用它们吗?我非常感谢任何帮助。感谢您查看我的问题。

2 个答案:

答案 0 :(得分:3)

将您的查询更改为:

$myQuery = "
    SELECT DISTINCT
        c.courtID,
        c.courtName,
        c.bookingFee
    FROM
        tennisCourts c
        INNER JOIN tenniscourts_Availability a ON c.courtID = a.courtID
    WHERE
        a.court_dateBooked = '". mysql_real_escape_string($CHOSEN_BOOKING_DATE) ."'
";

这将检索在指定日期预订的所有法院的法院信息。如果您想获得在指定日期预订的所有法院的法院信息,请使用此查询:

$myQuery = "
    SELECT
        courtID,
        courtName,
        bookingFee
    FROM
        tennisCourts
    WHERE
        courtID NOT IN (SELECT courtID FROM tenniscourts_Availability WHERE court_dateBooked = '". mysql_real_escape_string($CHOSEN_BOOKING_DATE) ."'
";

有关您的代码的一些注意事项:

  1. 您用于表名($db_table_)的PHP变量似乎未定义。
  2. 不确定您是否有特殊原因这样做,但是从您发布的代码中,我认为不需要在PHP变量中存储列的名称。它只会混淆你的例子。
  3. 确保您清理任何用户输入。直接使用来自$_GET的输入容易受到SQL injection
  4. 的攻击

答案 1 :(得分:0)

假设事情仅在预订时插入到可用性表中,我认为这就是你想要的。

SELECT c.courtID, c.courtName, c.bookingFee, a.court_dateBooked FROM tennisCourts c 
LEFT JOIN tenniscourt_Avaliability a ON c.courtID=a.courtID
WHERE b.court_dateBooked=$CHOSEN_BOOKING_DATE

然后,您可以通过检查court_dateBooked是否为空来过滤掉已经预订的那些。

有关左连接的更多信息,请参阅以下内容:What is the difference between "INNER JOIN" and "OUTER JOIN"?