2017-08-28 16 views
0

我有三个表,用户可以存储季节,房间和价格。为了更好地理解我想要达到的目的,此处提供了表格“季节”,并且不会在查询中使用。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,每个房间的每赛季。我期望得到的是:

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 

每个用户将能够添加“ulimited”季节,房间

任何suggetions? 谢谢

+0

什么是usr_id? – Strawberry

+0

添加房间,季节和价格的用户名或用户 – Nikos

+0

我知道这并不真正相关,但我只是想设想两个不同的用户在同一季节为同一个房间提供两种不同的价格 – Strawberry

回答

0

您正在描述一个数据透视表。您可以使用GROUP BY将每个room_id的结果减少为一行,然后使用条件表达式仅显示每个季节的价格。

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