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

Jak wyświetlić kategorię i podkategorię?

Poniższy kod powinien Ci pomóc. Jest to „funkcja rekurencyjna” – funkcja, która wywołuje samą siebie. Jak właśnie wspomniał @Fake51, nie jest to zbyt wydajne, ale powinno działać.

Będziesz potrzebować kodu CSS, aby ustrukturyzować utworzoną listę.

function showItems($parent = 0) {
    $q = "SELECT id, name FROM category WHERE parent_id = $parent";
    $q = mysql_query($q);
    if(mysql_num_rows($q)) {
        echo "<ul>";
        while($r = mysql_fetch_row($q)) {
            echo "<li>";
            echo "<a href=\"page.php?id=".$r[0]."\">".htmlentities($r[1])."</a>";
            showItems($r[0]);
            echo "</li>"\n;
        }
        echo "</ul>\n";
    }
}
showItems();

Edycja:Ponieważ nadal nie ma zaakceptowanej odpowiedzi, oto mój kod zmodyfikowany, aby zrobić to wszystko za pomocą pojedynczego zapytania SQL, które powinno być znacznie bardziej wydajne, choć potencjalnie nieco bardziej mylące. Zobacz, jak ci idzie.

//Recursive function to show menu items from a passed in array
function showItems(&$menu, $parent = 0) {
    if(is_array($menu[$parent]) && sizeof($menu[$parent])) {
        echo "<ul>";
        foreach($menu[$parent] as $num=>$name) {
            echo "<li>";
            echo "<a href=\"page.php?id=".$num."\">".htmlentities($name)."</a>";
            showItems($menu, $num);
            echo "</li>\n";
        }
        echo "</ul>\n";
    }
}

//Create a multi-dimensional array of ALL menu items, separated by parent
$menu = array();
$q = "SELECT id, name, parent_id FROM category ORDER BY order";
$q = mysql_query($q);
while($r = mysql_fetch_row($q)) {
    $menu[$r[2]][$r[0]] = $r[1];
}

//Call the function
showItems($menu);


  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 zapytań co sekundę w celu powiadomienia. Czy to dobra praktyka?

  2. Problem z dodaniem klucza obcego za pomocą Alter Table z istniejącą bazą danych MYSQL - nie można go dodać! Pomoc!

  3. Błąd MySQL 1436:Przepełnienie stosu wątków za pomocą prostego zapytania

  4. SQLSTATE[42000]:Błąd składni lub naruszenie dostępu:1055 Wyrażenie #3 listy SELECT nie znajduje się w klauzuli GROUP BY i zawiera niezagregowane

  5. #1115 – Nieznany zestaw znaków:„utf8mb4”