2012-08-05 46 views
0

我的mysql数据库是:PHP的MySQL搜索房间可用性需要帮助更好的SQL查询

BOOKING_ID, FROM_DATE, TO_DATE, 
R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14,R15,R16,R17 

其中R1 =房间1 ... R17 = room17,如果房间1预订,比R1将设置为1

下面

是我目前工作的SQL查询,我从来没有学习SQL,我需要帮助更好的sql查询!

for($room=1;$room<=$total_room;$room++) 
{ 
    $result = mysql_query(" 
    SELECT COUNT(`BOOKING_ID`) AS num 
    FROM $search_for_db_table 
    WHERE ( (FROM_DATE <= $search_to_date AND TO_DATE >= $search_to_date) 
      OR (FROM_DATE <= $search_from_date AND TO_DATE >= $search_from_date) 
      OR (FROM_DATE >= $search_from_date AND TO_DATE <= $search_to_date) 
     ) 
     AND R$room=1 
    ") or die(mysql_error()); 


    $row = mysql_fetch_assoc($result); 

    $numUsers[$room] = $row['num']; 
} 

//$numUsers[$room]=="0" means room available for booking... 
+0

当前语句有什么问题吗?“越”越好意味着更高效,更少代码,更好的表格结构等等 – 2012-08-05 09:42:24

+0

数据模型似乎对这些r1-r17字段名称很陌生 – 2012-08-05 09:45:33

+0

请不要使用'mysql_ *'函数,它们不再是维持和社区已经开始[弃用程序](http://goo.gl/KJveJ)。相反,您应该了解[准备好的语句](http://goo.gl/vn8zQ)并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能决定,[本文](http://goo.gl/3gqF9)将有助于选择。如果你想学习,[这里是一个很好的PDO相关教程](http://goo.gl/vFWnC)。 – vascowhite 2012-08-05 09:48:20

回答

0

然而,如果你不喜欢修改这个“丑”的数据模型,你可以用1查询,而不是与17个查询去。只需使用SUM(所有17场这样的SELECT子句是:

SELECT SUM(R1) AS sr1, SUM(R2) AS sr2, ...., SUM(R17) as sr17 
FROM 
WHERE [only with the date restictions] 

然后,如果结果集的各个栏为0,那么它是可用的,否则被占用

但一次。 ,对于错误设计的数据模型来说,这是一个“丑陋”的解决方案。

+0

其实我不是一个php/mysql程序员,但是电子工程师,我从零开始学习php/mysql/phpmyadmin,我知道这是非常“丑陋”的数据库设计,我为我的小型寄宿家庭预订系统编写了一个网站,好吧,但我知道我的SQL查询是如此“丑陋”,所以我要求帮助,以stackoverflow ...也许你的代码是适合我目前的数据库设计,谢谢你,我会尝试! – 2012-08-05 10:15:56

1

请了解有关设计数据库的更多信息。而不是每个房间都使用一列,只需使用多个表来获取信息,这样就可以组织得多了。

因此,让一个名为“房间”你让我们说15行该表的表。在房间号码列中输入“room_number”,然后在您的1或0列中选择“可用”。然后,简单的SQL语句将显示哪些房间可用。

然后你可以使用:

SELECT 'room_number' FROM rooms WHERE available = '0'