2011-11-11 6 views
0

これは私のモデル、部屋とアパートです。MySQL - 部屋からアパートまでの多対1:すべての部屋を反復することなくアパートのための最も安価な部屋を得る方法?

私の質問は、私がアパートのための最も安価な部屋を得ることを望んでいない場合は、絶対にすべての部屋を取得し、それらを反復し、最低価格の部屋を決定する必要がありますか?

アパートの新しい部屋を入力/編集/削除すると、自動的に最低価格の部屋に変更されるアパートメントからFKを追加することは可能でしょうか?

これを回避するためのメカニズムはいくつかありますか?

ありがとうございます。

+0

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_min MIN()クエリおよび/またはDBテーブルフィールドの詳細情報を提供できましたか? –

答えて

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 

最も安い部屋が選択の最初の要素になります。 、これはあなたが必要とするすべての場合に、何が必要SELECTリストに追加する

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

情報はすでにもちろんです:これはトリックを行う必要があります部屋や対応するアパート

+0

価格が – user85569

+0

のオーダーメードの場合、どのアパートメントに所属しているかにかかわらず、すべての客室が占有されます。「ORDERED BY proce DESC」は、最も高価な部屋を最初に返します。 – symcbean

0

との間に逆の関係を追加します。お部屋のテーブル、そうする必要はありませんに参加する。

2

あなたは2つのテーブルの構造が含まれていなかったので、私はあなたが以下の基本的な形式でそれらを持っていると仮定するとのオフに動作します:

アパート(ApartmentID、名前...) ルーム(RoomID、 ApartmentID、Price ...)

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

その特定のアパートで一番安い部屋を教えてください。あなたは(あなたがそれらを表示する方法に応じて)とアパートを反復すると、ルーム

によって
0

アパートの新しい部屋を入力/編集/削除すると、自動的に最低価格の部屋に変更されるアパートメントからFKを追加することは可能でしょうか?

いいえ、これは外部キーの対象ではありません。

「多くの」側のどちらが参照されるべきかを特定するために非常に高価なシナリオがある場合(たとえば、各アパートメントに数百万の部屋がある場合)、または選択基準1つの関連エントリは、「多数」のために格納されたデータを超えるデータに基づいていました。

しかし、あなたの場合には、それは単にです...

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を使用する必要があります。

関連する問題