Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP &MySQL Как да се показват категории всякакви подкатегории от базата данни

Разбира се, че е възможно. Този код ще изобрази <ul> <li> йерархично дърво, независимо от броя на нивата

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

Полученият HTML за вашия пример ще бъде:

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

Това ще се изобрази в браузър като този:

  • a &w
    • c и понякога y
    • г
  • b и f

Повтарям, това работи за всяко ниво на влагане. Надявам се това да помогне.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Въпросителни знаци на MySQL db вместо знаци на иврит..?

  2. Получаване на последния запис от mysql

  3. SQL - Актуализирайте множество записи в една заявка

  4. Разделен със запетая низ --> FUNCTION db.CHARINDEX не съществува

  5. как да промените формата на времевата марка в mysql