使用连接函数mysql php调用最小值

时间:2016-11-21 17:44:04

标签: php mysql select join

我有两张桌子:

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是访问者通过输入字段发送的值

1 个答案:

答案 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