是否可以在分层无序列表中显示平面数据库表?

时间:2014-06-12 19:35:21

标签: php html mysql sql

我有一个数据库表,其布局如下:

Business     Phone        City       State         Country

Baker      12345678    CityName 1  StateName 1   CountryName 1
Mason      91834919    CityName 2  StateName 2   CountryName 1
Welder     58149918    CityName 3  StateName 1   CountryName 1
Painter    48194918    CityName 4  StateName 3   CountryName 2
Chef       95982848    CityName 5  StateName 4   CountryName 3
Vendor     96928248    CityName 1  StateName 1   CountryName 1

我想在这样的html列表中显示这个表:

 CountryName 1
    - StateName 1
        * CityName 1
            * Vendor | 9692824
            * Baker | 12345678
        * CityName 3
            * Welder | 58149918 
    - StateName 2
        * CityName 2
            * Mason | 91834919 
- CountryName 2
    - StateName 3
        * CityName 4
            * Painter | 48194918
- CountryName 3
    - StateName 4
        * CityName 5
            * Chef | 95982848


最后,这个数据库表将非常庞大,随着时间的推移会增加许多业务。我甚至很难想象从哪里开始。

我的问题首先:

  • 我的桌子摆放方式是否可以实现这一点?
  • 如果是,我怎么会开始填充这样的列表?

我是PHP和mysql的新手,但我很快就把它包围了。我想我只需要一个例子或一些方向让我从这里开始。


如果可能,我是否可以看到将这些值输入到这样的列表中所需的PHP示例?


我问了一个新问题,因为我希望看到一个更直接的例子来说明如何实现这一目标:How can I rewrite my PHP & MySQL to group my HTML list by equal column values?

2 个答案:

答案 0 :(得分:1)

实际上很简单。在查询数据库并使用结果集时,只需将数据加载到多维数组中即可。所以像这样:

$final_array = array()
while($row = /* Your DB row fetch logic here */) {
    $row_object = new stdClass();
    $row_object->business = $row->business;
    $row_object->phone = $row->phone;
    $final_array[$row->country][$row->state][$row->city] = $row_object;
}

这为您提供了嵌套的对象数组,这些对象可以通过您喜欢的国家/州/城市的任意组合轻松寻址。

现在,您还可以考虑将您的手机/城市/州/国家/地区数据拆分为与业务有1对多关系的单独表格,如果您希望以规范化方式容纳具有多个位置的业务。

获得此数据后,输出到树/列表结构应该非常简单。像

这样的东西
foreach ($final_array as $country => $country_data) {
    // output $country and start a <ul> whatever you want HTML to look like
    foreach($country_data as $state => $state_data) {
        // output $state and start another list
        foreach($state_data as $city => $city_data) {
            // output $city and start another list
            foreach($city_data as $business_obj) {
                // output $business_obj->business and $business_obj->phone
            }
            // close city list
        }
        // close state list
    }
    // close country list
} 

答案 1 :(得分:0)

使用您拥有的表格结构,您可以:

  • 添加ORDER BY子句:ORDER BY CountryName, StateName, CityName;
  • 在查看结果时跟踪当前的国家/地区,州和城市名称;
  • 当这些变量中的任何变量发生变化时,添加一个或多个标题。