我有两张桌子:
hotels
id, hotel
rooms
id , hotel, type, stay, price
在第二张桌子上,根据客房用餐(住宿),有不同价格的同一房型的多行。
如何从第二张桌子中拨打这一房间类型的最低价格的一行呢?
我的代码如下
select h.hotel
, r.hotel
, r.stay
, r.type
, r.price
from hotels h
LEFT
JOIN rooms r
ON r.hotel = h.hotel
where r.type = '$rtype1
GROUP
BY r.hotel
ORDER
BY r.price asc
$ rtype是访问者通过输入字段发送的值
答案 0 :(得分:0)
执行此操作的基本方法是使用子查询获取每个酒店的第一个项目,然后将其加入以获取其他详细信息。然而在这种情况下,这不是一个好主意,因为几个房间可能具有相同的低价格。但是这样的事情: -
SELECT h.hotel,
r.stay,
r.typee,
r.price
FROM hotels h
LEFT OUTER JOIN
(
SELECT hotel,
MIN(price) AS min_price
FROM rooms
WHERE r.type = '$rtype1'
GROUP BY hotel
) sub0
ON sub0.hotel = h.hotel
LEFT OUTER JOIN rooms r ON r.hotel = sub0.hotel AND AND r.price = sub0.min_price AND r.type = '$rtype1'
另一个是(ab)使用GROUP_CONCAT和SUBSTRING_INDEX函数。这将按价格顺序获取每个房间的每个房间的所有详细信息,以逗号分隔(默认为GROUP_CONCAT),然后使用SUBSTRING_INDEX获取第一个详细信息。当物品自然包含分隔符时,这会很困难。
SELECT h.hotel,
SUBSTRING_INDEX(GROUP_CONCAT(r.stay ORDER BY r.price), ',', 1),
SUBSTRING_INDEX(GROUP_CONCAT(r.type ORDER BY r.price), ',', 1),
SUBSTRING_INDEX(GROUP_CONCAT(r.price ORDER BY r.price), ',', 1)
FROM hotels h
LEFT OUTER JOIN rooms r ON r.hotel = h.hotel AND r.type = '$rtype1'
GROUP BY h.hotel