我有一个像这样的“分层”表结构:
city { id (PK), name }
place { id (PK), city_id (FK), zip_code, street }
data { id (PK), place_id (FK), x, y, z, ... }
必须在这样的网页中显示:
city_1
|
|-- place_1: zip_code, street
| |
| |-- x, y, z, ...
| |-- x, y, z, ...
|
|-- place_2: zip_code, street
| |
| |-- x, y, z, ...
| |-- x, y, z, ...
|
city_2
|
|-- place_3: zip_code, street
| |
| |-- x, y, z, ...
| |-- x, y, z, ...
|
|-- place_4: zip_code, street
| |
| |-- x, y, z, ...
| |-- x, y, z, ...
|
...
当前是通过在模型中手动分组数据来解决的:
cities = query_cities()
foreach (cities as city) {
display_city(city)
places = query_places(city)
foreach (places as place) {
display_place(place)
datas = query_datas(place)
foreach (datas as data) {
display_data(data)
}
}
}
我还必须提供过滤功能(已经实现),因此我们可以过滤例如。 place_2,那么只会显示city_1 > place_2 > data...
。
问题是该列表必须受到限制,例如仅显示前20个数据行。这是因为我们正在处理相当大的数据集,所以我们必须按需提供“类Facebook”的数据加载。因此,当用户向下滚动时,将查询更多数据并将其添加到页面(使用Ajax)。
但是,在当前版本中实现此功能几乎是“几乎不可能的”(要跟踪我们中断循环并从下一次继续执行的位置,将非常困难。)
我认为最好通过使用适当的SQL查询来解决此问题。 我的第一个想法是我可以union
所有必要的表格,以便可以轻松地对其进行限制。但是,由于数据将是组合数据的单个列表,因此很难可视化结果。而且,由于数据列重复,因此大小会大得多。
是否存在使用关系数据库(更具体地说是MySQL)解决此问题的更好的解决方案?