我正在建立一个酒店网站。现在,我在用户输入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
答案 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函数。