SQL查询dosnt显示正确的结果

时间:2016-03-13 14:44:12

标签: html mysql sql

我正在建立一个酒店网站。现在,我在用户输入2个日期的页面上工作,并且sql查询检查是否有可用的房间。我自己在那里进入了预订,我在MYSQL控制台中测试了查询,并且它可以正常工作。但是,我无法在我的网站上工作。

<?php
$sql = "
SELECT romnummer
FROM rom
WHERE rom.id NOT IN 
(
    SELECT rom_id 
    FROM   bestilling B
           JOIN tilgjengelse RB
               ON B.id = RB.id
    WHERE  (ankomst <= $ankomst AND avreise >= $ankomst)
           OR (ankomst < $avreise AND avreise >= $avreise )
           OR ($ankomst <= ankomst AND $avreise >= ankomst)
);
";

$result = mysqli_query($conn, $sql);
while ( $row = mysqli_fetch_assoc($result) )
{
    echo "<p>" . $row["romnummer"] . "</p>";
}
?>

目前,我的理论酒店只有3间客房。房间号1当前正忙着,因此查询应该产生房间号2和2。 3,这两个房间是免费的。但是,当我运行此代码时,它将返回所有3个房间。什么时候应该只有两个。我确信我测试过的两个日期是关于被占用房间的日期。

代码是挪威语,对不起。

romnummer = roomnumber
bestilling = order
tilgjengelse = occupied(taken rooms)
ankomst = arrival
avreise = departure

2 个答案:

答案 0 :(得分:1)

您是否考虑过在b.id上使用IS NULL执行左外连接而不是使用嵌套查询?

Select R.id
From rooms R
Left outer join orders O ON r.id = o.id
Left outer join taken T ON o.id = t.id
WHERE (<arrival and departure check>) AND O.ID IS NULL

这应该返回所有没有匹配的房间

答案 1 :(得分:0)

乍一看逻辑似乎是正确的,正如作者所提到的,它在MSSQL控制台中按预期工作,所以我的猜测是日期转换出现问题,请尝试检查。您可以使用具有特定格式代码的STR_TO_DATE函数。