2017-08-28 12 views
0

私はユーザーが季節、部屋、価格を保存できる3つのテーブルを持っています。テーブル 'シーズンズ'はここでは私が何をしたいのかを理解するために提示されており、クエリでは使用されません。MySQLは価格、部屋、季節のテーブルを結合します

の表は以下のとおりです。

table seasons 

    |usr_id | season_id | season_name | 
    |-------|-----------|-------------| 
    | 1 |  1  |  June | 
    | 1 |  2  |  July | 
    | 1 |  3  | August | 


    table rooms 

    |usr_id | room_id | room_name | 
    |-------|---------|---------------| 
    | 1 | 1 | Studio_1 | 
    | 1 | 2 | Studio_2 | 
    | 5 | 3 | Other studio | 


    table prices 

    |usr_id | price_id | room_id | season_id | price | 
    |-------|----------|---------|-----------|-------| 
    | 1 |  1 | 1 |  1  | 10 | 
    | 1 |  2 | 2 |  1  | 100 | 
    | 1 |  3 | 1 |  2  | 20 | 
    | 1 |  4 | 2 |  2  | 200 | 
    | 1 |  5 | 1 |  3  | 30 | 
    | 1 |  6 | 2 |  3  | 300 | 

が、私は季節ごとの各部屋のために、USER_ID = 1のため、この例では、DBを照会し、価格を取得したいです。私が期待しているものは:

studio_1 | 10 | 20 | 30 | 
---------|----|----|----| 

studio_2 | 100 | 200 | 300 | 
---------|-----|-----|-----| 

私はテーブルの「部屋」と「値段」に参加しようとしましたが、正しい結果が得られません。私は、次の

SELECT r.room_name, p.price 
    FROM rooms AS r 
    LEFT JOIN prices AS p ON r.room_id = p.room_id 
    WHERE p.usr_id = 1 

各ユーザーは、季節や部屋

どれsuggetions「をulimited」を追加することができるようになりますでしょうか? ありがとうございます

+0

usr_idとは何ですか? – Strawberry

+0

部屋、季節、価格を追加したIDまたはユーザー – Nikos

+0

本当に関連性がないことは分かっていますが、2人の異なるユーザーが同じシーズンに同じ部屋に2つの異なる価格を提供するというシナリオを考えようとしています – Strawberry

答えて

0

あなたはピボットテーブルについて説明しています。結果をGROUP BYでroom_idごとに1行に減らし、条件式を使用してシーズンごとの価格のみを表示することができます。

SELECT r.room_name, 
    MAX(CASE p.season_id WHEN 1 THEN p.price END) AS price_season_1, 
    MAX(CASE p.season_id WHEN 2 THEN p.price END) AS price_season_2, 
    MAX(CASE p.season_id WHEN 3 THEN p.price END) AS price_season_3, 
    MAX(CASE p.season_id WHEN 4 THEN p.price END) AS price_season_4 
FROM rooms AS r 
LEFT JOIN prices AS p ON r.room_id = p.room_id 
WHERE p.usr_id = $usr_id 
GROUP BY r.room_id 

ピボットテーブルクエリを記述するときは、各列をハードコードし、対応する値ごとに式を記述する必要があります。あなたのコメントを再


各ユーザーは自分が必要とする季節な限り多くを作成することができますよう四季の数は、各ユーザーに対して同じではありません。

次に、特定のユーザーに必要なシーズンをアプリケーションが検出できるように、前のクエリを実行する必要があります。

SELECT season_id, season_name FROM seasons where usr_id = 1 

このデータを使用して、このユーザーに必要なだけ多くの列を選択リストに作成します。これをアプリケーションコードで行います。

ピボットテーブルについて読んだ場合、これは常に必要であることがわかります。クエリを書く前に列を知っている必要があります。 SQLは、見つかったデータ値に基づいて、実行中の列を追加することはできません。

+0

問題は、各ユーザーが必要とする季節に合わせて多くのユーザーを作成できるため、各ユーザーの季節の数が同じではないということです。 – Nikos