2014-06-12 35 views
0

我有一个是奠定了这样一个数据库表:是否可以在分层无序列表中显示平面数据库表?

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?

+0

您是否可以选择重写模式? –

+0

@ElGuapo是的,我可以。这不是我以前做过的事情。 – user3380795

+0

我不是一名PHP程序员,但在ColdFusion中这很简单。第一步是确保你的SQL以“按国家,州,城市,商业排序”结束。我怀疑这也将是事实与PHP。 –

回答

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; 
} 

这使您很容易被你喜欢的国家/国家/城市的任何组合的可寻址对象的嵌套数组。

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

一旦你有这个数据,输出到树/列表结构应该非常简单。类似于

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 
} 
+0

这很好。我打算发布这样的内容。但它似乎像原始的海报想知道如何使用该数据呈现HTML列表,“我想在这样的HTML列表中显示此表:” – JakeGould

+0

@JakeGould你可能是对的。我添加了一个关于如何处理这个问题的简短示例。 –

+0

@MikeBrant谢谢。我能够理解并利用这个例子来加快我的学习速度,并实现我的这个项目的最终目标。真的很感谢这里的快速帮助。 – user3380795

0

你所拥有的表结构,你可以这样做:

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

您能否通过跟踪当前的国家,州和城市名称来详细说明您的意思?这是PHP中的东西吗? – user3380795

+1

这确实是在php中完成的。你会使用像CurrentCountry,CurrentState等变量。 –

相关问题