Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PHP i MySQL Jak wyświetlić kategorie dowolne podkategorie z bazy danych

Oczywiście, że jest to możliwe. Ten kod wyrenderuje <ul> <li> drzewo hierarchiczne, niezależnie od liczby poziomów

<?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
?>

Wynikowy kod HTML dla twojego przykładu będzie wyglądał następująco:

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

To wyrenderuje się w przeglądarce takiej jak ta:

  • a &w
    • c i czasami y
    • d
  • b i f

Powtarzam, to działa na każdym poziomie zagnieżdżenia. Mam nadzieję, że to pomoże.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tabela czyszczenia MySQL ze zduplikowanych wpisów ORAZ ponownie połącz FK w tabeli zależnej

  2. MySQL otrzymuje brakujące identyfikatory z tabeli

  3. Problemy z Railsem 3 MySQL

  4. Jak ograniczyć wyniki w MySQL, PostgreSQL i SQLite?

  5. Jak obliczyć średnią sprzedaż tygodniową w MySQL?