限制分层数据+分组显示

时间:2019-04-13 14:47:52

标签: mysql sql

我有一个像这样的“分层”表结构:

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)解决此问题的更好的解决方案?

0 个答案:

没有答案