MySQL - 输出具有层次结构的项目的正确顺序?

时间:2016-02-25 14:38:06

标签: php mysql

我有以下MySQL表,我需要以正确的顺序输出结果。

function getYears() {
       // init start year
        var startYear = null;
        if ( angular.isDefined (vm.project.startDateObject._d) ) {
            startYear = parseInt(vm.project.startDateObject.format('YYYY'));
        }

       // init end year
        var endYear = null;
        if ( angular.isDefined(vm.project.endDateObject._d) ) {
            endYear = parseInt(vm.project.endDateObject.format('YYYY'));
        }

        // init budgets
        if (startYear && endYear) {
            var years = [];
            for (var i = startYear; i <= endYear; i++) {
                years.push(i);
            }
            return years;
        }
    }

正确的顺序如下:

id     title     parent_id     display_order     level
20     company   NULL          0                 0
25     contact   NULL          1                 0
26     sales     NULL          2                 0
21     about     20            0                 1
22     team      20            1                 1
23     services  20            2                 1
24     apps      23            0                 2

我无法弄清楚如何通过&#34; level&#34;进行查询。然后&#34; display_order&#34;但要确保跟随父母的子项目。

我正在寻找一个MySQL答案,但如果您有关于如何使用PHP解析结果的建议,我也会考虑这一点。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我经常使用php-function获取级别为

的数组类别
public function getCategoryTreeForParentId($parent_id = 0) {
  $categories = array();
  $this->db->from('categories');
  $this->db->where('parent_id', $parent_id);
  $result = $this->db->get()->result();
  foreach ($result as $mainCategory) {
    $category = array();
    $category['id'] = $mainCategory->id;
    $category['name'] = $mainCategory->name;
    $category['parent_id'] = $mainCategory->parent_id;
    $category['sub_categories'] = $this->getCategoryTreeForParentId($category['id']);
    $categories[$mainCategory->id] = $category;
  }
  return $categories;
}

当您在html中回显时,您可以依赖level值来对类别进行分类