Вывести меню массивом из базы

Discussion in 'PHP' started by antras2007, 2 Nov 2014.

  1. antras2007

    antras2007 New Member

    Joined:
    4 Jul 2013
    Messages:
    33
    Likes Received:
    0
    Reputations:
    0
    Помогите кто знает!!!Есть таблица в базе: categories в ней поля: id, categories, parent_category. Мне нужно вывести на экран меню массивом из базы данных т.е. что бы выводились родительские категории а в них подпунктами дочерние категории и что бы они были ссылками. Не могу соорудить правильно массив.
    Вот код



    PHP:
    <?php
    include "connectdb.php";
    class 
    menu{
        private 
    $mysqli;

        function 
    left_menu(){
            
    $this->mysqli connectdb::getInstance();

            
    $mysqli connectdb::getInstance();
            
    $mysqli->query("set names 'utf8'") or die(mysqli_error($mysqli));
            
    $result $mysqli->query('select category from categories where parent_category = 0');
            
    $result_child $mysqli->query('select category from categories where parent_category != 0');
            
    $results = array();
            
    $i 0;
            
    $j 0;
            while (
    $row $result->fetch_array(MYSQLI_NUM)){
                
    $results[$i] = $row;
                while(
    $rows $result_child->fetch_array(MYSQL_NUM)){
                    
    $results[$i][$j] = $rows;
                    
    $j++;
                }
                
    $i++;


            }
            echo 
    "<pre>";
            
    print_r($results);
            }
    }

    $menu = new menu();
    $menu->left_menu();
    целый день долбаюсь ничего не выходит.
     
  2. Dr.Frank

    Dr.Frank Elder - Старейшина

    Joined:
    31 Jul 2002
    Messages:
    301
    Likes Received:
    72
    Reputations:
    12
    категории только двухуровневые?

    сделай всё одним запросом:
    PHP:
    select zero.id as zero_idzero.categories as zero_categories zero.parent_category as zero_parent_categoryfirst.id as first_idfirst.categories as first_categoriesfirst.parent_category as first_parent_category from categories zero left join categories first on zero.id=first.parent_category where zero.parent_category 0 order by zero_id ascfirst_id asc
    - что-то вроде этого

    в итоге при выборке из базы будет массив вида zero_id,zero_categories,zero_parent_category,first_id,first_categories, first_parent_category

    хотя, zero_parent_category можно даже не вытаскивать
     
    #2 Dr.Frank, 2 Nov 2014
    Last edited: 2 Nov 2014
  3. antras2007

    antras2007 New Member

    Joined:
    4 Jul 2013
    Messages:
    33
    Likes Received:
    0
    Reputations:
    0
    А как сделать одним запросом. Только можно на языке sql.
     
  4. antras2007

    antras2007 New Member

    Joined:
    4 Jul 2013
    Messages:
    33
    Likes Received:
    0
    Reputations:
    0
    Спасибо я уже нашел решение

    PHP:
    <?php
    include "connectdb.php";
    class 
    menu
    {
        private 
    $mysqli;

        function 
    left_menu($parent_category$lvl)
        {


            
    $this->mysqli connectdb::getInstance();
            
    $this->mysqli->query("set names 'utf8'") or die(mysqli_error($this->mysqli));
            
    $query "select * from categories where parent_category = " $parent_category " order by category";
            
    $result $this->mysqli->query($query);
            if (
    mysqli_num_rows($result) > 0) {
                echo 
    "<ul\n>";
                while (
    $row mysqli_fetch_array($result)) {
                    
    $id1 $row["id"];
                    echo 
    "<li\n>";
                    echo(
    "<a href=\"" "?id=" $id1 "\">" $row["category"] . "</a>" "  \n");
                    echo 
    "</li\n>";
                    
    $this->left_menu($id1$lvl);
                    
    $lvl--;
                }

                echo 
    "</ul\n>";
            }
        }
    }

    $menu = new menu();
    $menu->left_menu(00);