這些是我的模特,房間和公寓。MySQL - 多對一從房間到公寓:如何獲得價格最低的公寓房間,而無需遍歷所有房間?
我的問題是,如果我不想爲公寓獲得最低價格的房間,我是否必須首先獲得所有房間,重複它們,並確定價格最低的房間?
如果我輸入/編輯/刪除公寓的新房間,是否有可能從公寓添加FK到房間,這將自動更改爲價格最低的房間?
MySQL是否提供了一些機制來解決這個問題?
在此先感謝。
這些是我的模特,房間和公寓。MySQL - 多對一從房間到公寓:如何獲得價格最低的公寓房間,而無需遍歷所有房間?
我的問題是,如果我不想爲公寓獲得最低價格的房間,我是否必須首先獲得所有房間,重複它們,並確定價格最低的房間?
如果我輸入/編輯/刪除公寓的新房間,是否有可能從公寓添加FK到房間,這將自動更改爲價格最低的房間?
MySQL是否提供了一些機制來解決這個問題?
在此先感謝。
SELECT apartment.ID,
MIN(room.Price)
FROM room
JOIN apartment ON room.apartmentID=apartment.ID
GROUP BY apartment.ID;
我做密集很明顯,你猜猜你的關係。
這應該做的伎倆:
SELECT
rooms.price,
apartments.id
FROM rooms
JOIN apartments
WHERE rooms.apartment_id = apartments.id
ORDER BY rooms.price ASC
LIMIT 1
添加到SELECT列表中你需要什麼,如果這是你所需要的信息當然是已經在房間表,所以不需要加入。
既然你沒有包括您2代表的結構,我會工作過假設你有他們在下面的基本格式:
公寓(ApartmentID,名稱...) 間(RoomID, ApartmentID,Price ...)
select RoomID from Room where ApartmentID = x order by price desc limit 1
這應該給你在那個特定的公寓最便宜的房間。你需要通過所有的公寓迭代得到與之相關的最便宜的房間(取決於你如何顯示它們對),並通過迭代公寓將遠遠小於查詢比
房如果我輸入/編輯/刪除公寓房間的新房間,是否有可能從公寓添加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。
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_min MIN()您能否提供關於查詢和/或數據庫表格字段的更多信息 –