我看过很多类似的问题,但还没能让它为我所用。我正在创建一个酒店预订系统,我希望列出在请求的预订日期至少有一个房间可用的酒店。
这是我到目前为止提出的问题
SELECT
ac.id,
ac.name,
ac.link,
ac.type,
ac.country,
co.name AS countryName,
ac.state,
st.statename,
ac.cityid AS cityId,
ci.name AS cityName,
ac.addr,
ac.featuredimage,
ac.amenities,
ac.starrating,
ac.bookings_received,
ro.roomprice,
SUM(ro.numberofrooms) AS totalRooms,
roomsBooked = (
SELECT
*,
SUM(numberofroomsbooked) AS roomsBooked
FROM
bookings
WHERE
reservationto >= '2016-07-07' AND reservationfrom <= '2016-07-09'
AND hotelid = ro.hotel
)
FROM
accomodations ac
JOIN countries co ON ac.country = co.id
JOIN states st ON ac.state = st.id
JOIN city ci ON ci.id = ac.cityid
JOIN room ro ON ac.id = ro.hotel
WHERE
ac.active = 1 AND ac.delete = 0
GROUP BY
ac.id
我是MySQL的新手,这真的失控了。这个想法是计算酒店的房间总数,减去给定日期范围内预订的房间总数。我能得到一些帮助吗?
子查询
SELECT
*,
SUM(numberofroomsbooked) AS roomsBooked
FROM
bookings
WHERE
reservationto >= '2016-07-07' AND reservationfrom <= '2016-07-09'
AND hotelid = ro.hotel
它自己就能很好地工作,但这个不行。
是否尝试过此查询?您按住宿酒店分组,因此,如果您将 SUM 函数与预订的房间一起使用,它应该会返回您预订的房间总数。我没有尝试过。
我希望它能解决你的问题。
SELECT
ac.id,
ac.name,
ac.link,
ac.type,
ac.country,
co.name AS countryName,
ac.state,
st.statename,
ac.cityid AS cityId,
ci.name AS cityName,
ac.addr,
ac.featuredimage,
ac.amenities,
ac.starrating,
ac.bookings_received,
ro.roomprice,
SUM(ro.numberofrooms) AS totalRooms,
SUM(numberofroomsbooked) AS bookedRooms
FROM
accomodations ac
JOIN bookings b ON ac.id = b.hotelid
JOIN countries co ON ac.country = co.id
JOIN states st ON ac.state = st.id
JOIN city ci ON ci.id = ac.cityid
JOIN room ro ON ac.id = ro.hotel
WHERE
ac.active = 1 AND ac.delete = 0
AND reservationto >= '2016-07-07' AND reservationfrom <= '2016-07-09'
GROUP BY
ac.id;
编辑:基于上一个查询构建
SELECT
ac.id,
ac.name,
ac.link,
ac.type,
ac.country,
co.name AS countryName,
ac.state,
st.statename,
ac.cityid AS cityId,
ci.name AS cityName,
ac.addr,
ac.featuredimage,
ac.amenities,
ac.starrating,
ac.bookings_received,
ro.roomprice,
ro.totalRooms
FROM
accomodations ac
JOIN countries co ON ac.country = co.id
JOIN states st ON ac.state = st.id
JOIN city ci ON ci.id = ac.cityid
JOIN (
SELECT
hotel,
roomprice,
SUM(numberofrooms) AS totalRooms
FROM
room
GROUP BY
hotel
) ro ON ac.id = ro.hotel
JOIN (
SELECT
hotelid,
SUM(numberofroomsbooked) ASroomsBooked
FROM
bookings
WHERE
reservationto >= '2016-07-07' AND reservationfrom <= '2016-07-09'
GROUP BY
hotelid
) bo ON ac.id = bo.hotelid
WHERE
ac.active = 1 AND ac.delete = 0
GROUP BY
ac.id
更新了查询删除了内部选择并将其添加为内部连接
SELECT
ac.id,
ac.name,
ac.link,
ac.type,
ac.country,
co.name AS countryName,
ac.state,
st.statename,
ac.cityid AS cityId,
ci.name AS cityName,
ac.addr,
ac.featuredimage,
ac.amenities,
ac.starrating,
ac.bookings_received,
ro.roomprice,
SUM(ro.numberofrooms) AS totalRooms,
SUM(tm.roomsBooked ) as roomsBooked,
FROM
accomodations ac
JOIN countries co ON ac.country = co.id
JOIN states st ON ac.state = st.id
JOIN city ci ON ci.id = ac.cityid
JOIN room ro ON ac.id = ro.hotel
(
SELECT
hotelid,
SUM(numberofroomsbooked) AS roomsBooked
FROM
bookings
WHERE
reservationto >= '2016-07-07' AND reservationfrom <= '2016-07-09'
group by hotelid
) tm on tm.hotelid=ro.hotel
WHERE
ac.active = 1 AND ac.delete = 0
GROUP BY
ac.id
问题内容: 我有如下所示的ind Mysql可用性表: 每个房间的每个可用日期都有一行。可能存在间隙,例如,房间1可能有8月1,2,3,5,6,13,14,15的条目,隔天不可用。 我需要查询以找到room_ids列表,其中在日期范围内每天都有可用的空间。 换句话说,获取room_id列表,其中在开始日期和结束日期之间的每个日期都有每个房间的条目。 问题答案: 您想要这样的东西: 该子句将计算该时
问题内容: 使用MySQL 表 询问 我想以特定格式显示日期 预期产量 如何在mysql中进行查询。 需要查询帮助 问题答案: 您可以将DATE_FORMAT与格式字符串’%d-%M-%Y’一起使用。 结果:
问题内容: 我绝不是MySQL专家,所以我正在寻求有关此问题的任何帮助。 我需要执行一个简单的测试(原则上),我有这个(简化的)表: 我需要在这里找到两件事: 如果任何用户的汽车任务中有日期重叠超过一天(任务结束可以与新任务开始的同一天)。 是否有两个用户试图在同一日期分配相同的汽车,或者他们在同一汽车上的日期范围重叠。 因此,我正在寻找的查询(或多个查询)应返回这些行: 我觉得我在这里碰壁,我很
在一个日期列中有一个表,在同一个日期的不同时间有这么多总计的条目,但我不担心时间。我需要找到某些日期所有总额,随着用户名。当我使用下面的查询。它显示语法错误 选择用户名,总额,从账单日期='2013-04-12' 在上面的查询日期是列名,请帮我。
问题内容: 是否可以查询特定日期? 我在mongo Cookbook中发现我们可以针对某个范围进行查询 ,例如: 但是可能有特定的日期吗?这不起作用: 问题答案: 如果您保存在数据库中的日期没有时间(恰好是年,月,日),那应该可行。 您保存的日期可能是,其中包括时间成分。要查询这些时间,您需要创建一个包含一天中所有时刻的日期范围。
问题内容: 我的项目中有一种情况,如下所示。 在检查可用房间时 第一个查询从满足日期范围的预订表中检索房间号列表 类似地,第二个从餐桌预订上做同样的事情 最后一个查询使用上面两个查询提供的列表,并获取不在生成的列表中的房间列表。 可以在2010年10月8日/ 2010年8月15日正常工作 在20-08-2010 / 25-08-2010可以正常工作 当我给出10到15之间的日期时,它对于20到25