Mysql
 sql >> Database >  >> RDS >> Mysql

Come visualizzare la categoria e la sottocategoria?

Il codice seguente dovrebbe iniziare. È una "funzione ricorsiva" - una funzione che chiama se stessa. Come ha appena accennato @Fake51, non è molto efficiente, ma dovrebbe funzionare.

Avrai bisogno di alcuni CSS per strutturare l'elenco che hai prodotto.

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();

Modifica:poiché non è stata ancora accettata una risposta, ecco il mio codice modificato per fare tutto con una singola query SQL che dovrebbe essere molto più efficiente, anche se potenzialmente un po' più confusa. Guarda come va per te.

//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);