sql >> Databáze >  >> RDS >> Mysql

PHP &MySQL Jak zobrazit kategorie libovolné podkategorie z databáze

Samozřejmě je to možné. Tento kód vykreslí <ul> <li> hierarchický strom, bez ohledu na počet úrovní

<?php
  //Connect to mysql server
  $cn = mysql_pconnect("server", "username", "password");
  mysql_select_db("database_name");
  $rs = mysql_query("SELECT id, parent_id, category FROM categories", $cn);
  $childrenTree = array(); //Will store an array of children for each parent
  $categoryNames = array(); //Will store category name for each id
  //We fill $childrenTree and  $categoryNames from database
  while($row = mysql_fetch_array($rs)){
     list($id, $parent_id, $category) = $row;     
     $categoryNames[(string)$id] = $category;
     $parent_id = (string)$parent_id;
     if(!array_key_exists($parent_id, $childrenTree)) 
         $childrenTree[$parent_id] = array();
     $childrenTree[$parent_id][] = (string)$id;
  }

 //Main recursive function. I'll asume '0' id is the root node
 function renderTree($parent = "0"){
    global $categoryNames;
    global $childrenTree;
    if($parent != "0") echo "<li> ", $categoryNames[$parent], "\n";
    $children = $childrenTree[$parent];
    if(count($children) > 0){ //If node has children
       echo "<ul>\n";
       foreach($children as $child)
          renderTree($child);
       echo "</ul>\n";
    }
    if($parent != "0") echo "</li>\n";
 }
 renderTree();  //This renders the hierarchical tree
?>

Výsledný kód HTML pro váš příklad bude:

<ul>  
  <li> a & w
    <ul>
        <li> c & sometimes y </li>
        <li> d </li>
    </ul>
  </li>
  <li> b & f </li>
</ul>

To se vykreslí v prohlížeči, jako je tento:

  • a &w
    • c &někdy y
    • d
  • b &f

Opakuji, že to funguje pro jakoukoli úroveň vnoření. Doufám, že to pomůže.




  1. Naučte se základy protokolování Java

  2. Příkaz T-SQL Stuff

  3. PHP-MYSQL:Převod Unix Timestamp na DateTime a naopak

  4. Chyba (blízko ON na pozici 25) při importu tabulky pro WORDPRESS (Chyba cizího klíče)