按日期搜索Mysql查询
问题描述:
我尝试创建一个查询,该查询在签入和结帐日期之间显示可用酒店。另外,当我预订特定房间时,我将其预订列设置为1.也就是说,当结帐日期实际发生时,触发功能会将预订列设置为0.按日期搜索Mysql查询
如果所有房间酒店预订(预订= 1)和这些房间的入住结帐日期是特定日期(入住结帐输入),然后不要将该酒店列入清单。我的查询不显示我想要的结果。
查询:输入:国家(州),登记和结帐。
SELECT DISTINCT a.* FROM accommodation a INNER JOIN cb_states s ON a.state = s.id
INNER JOIN accommodation_rooms ar ON a.id = ar.accommodation
WHERE state = 1 AND a.id NOT IN
(
SELECT 1 FROM booking b
WHERE
(
(b.arrival_date BETWEEN '2017-11-16' AND '2018-03-16')
OR
(b.departure_date BETWEEN '2017-11-16' AND '2018-03-16')
)
)
当我运行查询时,它总是显示所有酒店,不管日期。如果我写... WHERE ar.booked = 0 AND state = 1 AND a.id NOT IN...
,那么它不显示住宿ID 13,但它不会显示当我更改日期。
答
你有多 问题与您的查询:
- 该
NOT IN
名单有SELECT 1
。这并没有给NOT IN
列表种类繁多。 - 你的重叠逻辑是错误的。
- 我认为你需要将住宿房间连接到预定的住宿房间。
所以:
SELECT DISTINCT a.*
FROM accommodation a INNER JOIN
cb_states s
ON a.state = s.id INNER JOIN
accommodation_rooms ar
ON a.id = ar.accommodation
WHERE s.state = 1 AND
a.id NOT IN (SELECT br.accommodation_room
FROM booking b JOIN
booked_room br
ON b.?? = br.??
WHERE b.arrival_date <= '2018-03-16' AND
b.departure_date >= '2017-11-16'
);
可能是什么我的情况最好的逻辑是什么? –
@MalenaT。 。 。这有逻辑修复。 '
我明白了。谢谢,'b。? = br。??'在这里,我写了'b.id = br.booking',它仍然显示错误的结果。另外,我将住宿房间连接到了子查询中的预订房间'......加入了预订房间,并且再次显示错误的结果。 –