SQL Query显示属性下的所有可用房间

时间:2014-01-27 15:06:48

标签: sql oracle

我的SQL知识不是我最强的,我正在努力寻找如何实现我所寻找的目标。

当我运行我的查询时,我想显示房子的名称,然后在下面我想显示所有与房子相关的房间(这些房间可以租用)

所需显示

15 Property Way - PP34PQ
   Double bedroom - £500.00P/M
   Single bedroom - £300.00P/M

当前显示

15 Property Way - PP34PQ Double bedroom - £500.00P/M
15 Property Way - PP34PQSingle bedroom - £300.00P/M

我猜我需要写一些分组查询才能做到这一点,但我不太清楚如何实现这一目标。我当前的查询看起来像这样

SELECT properties.prop_details, properties.num_rooms, addresses.addr_line_1, 
   addresses.addr_postcode, addresses.addr_city, room_details
FROM rooms
JOIN properties ON properties.property_id = rooms.property_id
JOIN addresses ON addresses.addr_id = properties.prop_addr
JOIN cities ON addresses.addr_city = cities.city_id
WHERE rooms.property_id = 1;  

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

听起来您尝试构建报告并尝试使用SQL而不是Web解决方案进行显示。

将数据及其展示分开。
获取数据表,然后使用PHP循环访问它,为每个建筑创建一个表。

通常,你会使用递归,但MySQL不支持它。

您可以使用

ORDER BY premise.name, premise.id, room.nr, room.id

我猜您需要按房间和属性字段进行分组,使用地址和城市字段的最大聚合函数,因为属性(建筑物)可以有多个地址,每个入口一个......

SELECT 
     premises.field_1
    ,premises.field_2
    ,premises.field_3

    ,room.field_1
    ,room.field_2
    ,room.field_3

    ,max(address.field1) as adr_f1
    ,max(address.field2) as adr_f2
    ,max(address.field3) as adr_f3   
FROM Whatever

JOIN WHATEVER

WHERE (1=1) 
AND (whatever)

GROUP BY 

     premises.field_1
    ,premises.field_2
    ,premises.field_3

    ,room.field_1
    ,room.field_2
    ,room.field_3

HAVING (WHATEVER)

ORDER BY premises.field_x, room.field_y