0

我的mysql数据库是:

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

其中 R1=room1...R17=room17,如果 room1 已预订,则 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...
4

2 回答 2

1

请了解有关设计数据库的更多信息。与其为每个房间使用一列,不如使用多个表格来获取信息,这样它就更有条理了。

因此,在您制作的表格中制作一个名为“房间”的表格,假设为 15 行。用一列“room_number”表示房间号,一列“available”表示您的 1 或 0。一个简单的 SQL 语句然后显示哪些房间可用。

然后你可以使用:

SELECT 'room_number' FROM rooms WHERE available = '0'
于 2012-08-05T09:43:48.973 回答
0

然而,如果您不喜欢修改这个“丑陋”的数据模型,您可以使用 1 个查询而不是 17 个查询。只需对所有 17 个字段使用 SUM(。因此 SELECT 子句将是:

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

然后如果结果集的相应列为0则可用,否则被占用。

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

于 2012-08-05T09:57:33.313 回答