1

2 つtableの があります。1 つは でmaster、もう 1 つはdetail( 外部キー ) です。masterテーブルにはhierarchy構造があります。master各行にはparent階層があります (自己外部キー)。おそらく、テーブルの DML で明確に説明できます。

CREATE TABLE classe_menu (                          
               class_menu_code int(10) NOT NULL auto_increment,  
               class_menu_lib varchar(50) default NULL,          
               class_menu_comment text,                          
               class_menu_deleted tinyint(1) default '0',        
               class_menu_ordre int(11) default NULL,            
               class_menu_parent int(10) default NULL,           
               PRIMARY KEY  (class_menu_code) ,                                                                                   
               KEY association_108_fk (class_menu_parent),                                                                 
               CONSTRAINT fk_association_108 FOREIGN KEY (class_menu_parent) REFERENCES classe_menu (class_menu_code)                   
             ) ENGINE=InnoDB DEFAULT CHARSET=latin1

CREATE TABLE menu (                                                                                           
          menu_code int(10) NOT NULL auto_increment,                                                                  
          class_menu_code int(10) default NULL,                                                                       
          menu_lib varchar(100) default NULL,                                                                         
          menu_url varchar(255) default NULL,                                                                         
          menu_titre varchar(100) default NULL,                                                                       
          menu_parent decimal(10,0) default NULL,                                                                     
          menu_visible tinyint(1) default NULL,                                                                       
          menu_ordre decimal(2,0) default NULL,                                                                       
          menu_action varchar(50) default NULL,                                                                       
          menu_icone_img varchar(255) default NULL,                                                                   
          menu_icone_flag tinyint(1) default '0',                                                                     
          menu_icone_title varchar(50) default NULL,                                                                  
          menu_deleted tinyint(1) default '0',                                                                        
          menu_tooltip varchar(25) default NULL,                                                                      
          menu_trace text,                                                                                            
          menu_image varchar(255) default NULL,                                                                       
          menu_contextuel tinyint(1) default '0',                                                                     
          menu_logo varchar(255) default NULL,                                                                        
          menu_display int(1) default '0',                                                                            
          PRIMARY KEY  (menu_code),                                                                                   
          KEY association_109_fk (class_menu_code),                                                                 
          CONSTRAINT fk_association_109 FOREIGN KEY (class_menu_code) REFERENCES classe_menu (class_menu_code)  
        ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='liste des menus du site'

ご覧のとおり、「classe_menu」はmasterテーブルで、「menu」はdetailテーブルです。しかし、マスター テーブル 'classe_menu' 内にはhierarchy、'class_menu_parent' 列によって実装される構造もあります。'classe_menu' 行は、rootそのhierarchy'class_menu_parent' がNULL.

今私が欲しいのは、すべての 'classe_menu'ルート行とすべての 'classe_menu' の 'menu' 行、つまりすべてのルート 'classe_menu' とそのすべてのchildren.

どうやってするか ?

4

1 に答える 1

1
function getMenuChildren($code,$code_is_class_menu=false){
    $children = array();
    $sql = 'SELECT * FROM menu WHERE '.($code_is_class_menu?'class_menu_code':'menu_parent').' = '.$code;
    $res = mysql_query($sql);
    while ($row = mysql_fetch_assoc($res)){
        $row['children'] = getMenuChildren($row['menu_code']);
        $children[] = $row;
    }
    return $children;
}

$class_menus = array();
$sql = 'SELECT * FROM classe_menu WHERE class_menu_parent IS NULL';
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)){
    $row['children'] = getMenuChildren($row['class_menu_code'],true);
    $class_menus[] = $row;
}

print_r($class_menus);
于 2012-07-05T07:35:29.543 に答える