2016-11-21 107 views
-2

調用最小值我有兩個表:使用連接功能MySQL的PHP​​

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 

$舍入類型代碼是通過輸入字段訪問者發送

+1

'rooms.type ='$ rtype1'是那個錯字嗎? –

+0

見http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-查詢 – Strawberry

+0

歡迎來到Stack Overflow!您可以閱讀如何[問]問題並創建[mcve]。這使我們更容易幫助你。 – Katie

回答

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 
+0

感謝您的解決方案。它已經帶來了我想要的最低價格,但問題是它不會帶來同一排的其他領域,但它帶來了我正在尋找其房間的酒店名稱的第一行的值。 – Mido

+0

例如:min_price爲600,r.stay應爲半膳。但第一個結果是價格700和全板r.stay。所以我會從查詢中得到最低價格是600,r.stay是全盤的,這是不正確的。你能幫我解決這個問題嗎?許多在此先感謝 – Mido

+0

@Mido - 我已經把不應該這樣做(即結果我希望你的原始查詢) – Kickstart