Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用连接函数mysql php调用最小值_Php_Mysql_Select_Join - Fatal编程技术网

使用连接函数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-我提出的解决方案不应该这样做(这是我对您原始查询的预期结果),您是否认为这是因为多行的最低价格值相同?我的意思是多个房间在一家酒店中的最低价格相同,我只想要一个结果(任何一个)