使用连接函数mysql php调用最小值
我有两张桌子:使用连接函数mysql php调用最小值,php,mysql,select,join,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
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是访客通过输入字段发送的值,基本方法是使用子查询获取每个酒店的第一个项目,然后将其合并以获取其他详细信息。然而,在这种情况下,这不是一个好主意,因为几个房间可能有相同的低价。但是像这样的事情:-
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),然后使用子字符串_索引获取第一个详细信息。当项目可能自然包含分隔符时,这将很困难
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
rooms.type='$rtype1
是打字错误吗?请参阅欢迎使用堆栈溢出!你可以阅读如何提出问题并创建一个新的解决方案。这使得我们可以更容易地帮助您。$rtype是访问者通过输入字段发送的值。需要注意的是:在sql查询中直接使用用户输入存在安全风险,并且允许。有很多方法可以避免这种情况,其中一些在中介绍。感谢您的解决方案。它带来了我想要的最低价格,但问题是它没有带来同一行的其他字段,而是带来了第一行的值,第一行的名称是我正在寻找的酒店房间。例如:最低价格是600,r.stay应该是一半。但是,虽然第一个结果的价格是700美元,而r.stay是全板的。因此,我将从查询中得到,最低价格是600,r.stay是满板,这不是真的。你能帮我做这个吗?非常感谢advance@Mido-我提出的解决方案不应该这样做(这是我对您原始查询的预期结果),您是否认为这是因为多行的最低价格值相同?我的意思是多个房间在一家酒店中的最低价格相同,我只想要一个结果(任何一个)