2011-11-11 53 views
0

這些是我的模特,房間和公寓。MySQL - 多對一從房間到公寓:如何獲得價格最低的公寓房間,而無需遍歷所有房間?

我的問題是,如果我不想爲公寓獲得最低價格的房間,我是否必須首先獲得所有房間,重複它們,並確定價格最低的房間?

如果我輸入/編輯/刪除公寓的新房間,是否有可能從公寓添加FK到房間,這將自動更改爲價格最低的房間?

MySQL是否提供了一些機制來解決這個問題?

在此先感謝。

+0

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_min MIN()您能否提供關於查詢和/或數據庫表格字段的更多信息 –

回答

3
SELECT apartment.ID, 
    MIN(room.Price) 
FROM room 
    JOIN apartment ON room.apartmentID=apartment.ID 
GROUP BY apartment.ID; 

我做密集很明顯,你猜猜你的關係。

0
SELECT * FROM rooms WHERE apartment = "apartment1" ORDERED BY price DESC 

最便宜的房間將是選擇的第一個元素。加入房間和相應的公寓之間的負相關關係

+0

這將導致所有房間,無論他們屬於哪個公寓,在按價格訂購時將被計入 – user85569

+0

「ORDERED BY PROCED」將首先返回最昂貴的房間。 – symcbean

0

這應該做的伎倆:

SELECT 
    rooms.price, 
    apartments.id 
FROM rooms 
JOIN apartments 
WHERE rooms.apartment_id = apartments.id 
ORDER BY rooms.price ASC 
LIMIT 1 

添加到SELECT列表中你需要什麼,如果這是你所需要的信息當然是已經在房間表,所以不需要加入。

2

既然你沒有包括您2代表的結構,我會工作過假設你有他們在下面的基本格式:

公寓(ApartmentID,名稱...) 間(RoomID, ApartmentID,Price ...)

select RoomID from Room where ApartmentID = x order by price desc limit 1 

這應該給你在那個特定的公寓最便宜的房間。你需要通過所有的公寓迭代得到與之相關的最便宜的房間(取決於你如何顯示它們對),並通過迭代公寓將遠遠小於查詢比

0

如果我輸入/編輯/刪除公寓房間的新房間,是否有可能從公寓添加FK到房間,這將自動更改爲價格最低的房間?

不,這不是外鍵的用途。

如果您有一個情景,確定要引用哪個「多」方(例如,每間公寓中有數百萬個房間)或選擇標準的情況下使用FK可能是可以原諒的一個相關的條目是基於存儲的數據「很多」的數據。

但在你的情況下,它簡直是......

SELECT room.id 
FROM room 
WHERE room.apartment=? 
ORDER BY room.price ASC 
LIMIT 0,1 

(其中?表示用於選擇公寓標識符)。

或者如果你想在所有的公寓最便宜的價格,像....

SELECT apartment.name, apartment.id...., MIN(room.price) 
FROM room INNER JOIN apartment 
    ON (room.apt_id=apartment.id) 
GROUP BY apartment.name, apartment.id.... 

查找ING哪個房間每間公寓是最便宜的是位更多地參與 - 考慮,你就有了各自具有相同(最低)價格幾個房間的情況。您需要使用max concat trick