Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để hiển thị danh mục và danh mục con?

Đoạn mã dưới đây sẽ giúp bạn bắt đầu. Đó là một "hàm đệ quy" - một hàm gọi chính nó. Như @ Fake51 vừa đề cập, nó không hiệu quả lắm, nhưng nó sẽ hoạt động.

Bạn sẽ cần một số CSS để cấu trúc danh sách bạn đã tạo.

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

Chỉnh sửa:Vì vẫn chưa có câu trả lời được chấp nhận, đây là mã của tôi đã được sửa đổi để thực hiện tất cả với một truy vấn SQL duy nhất sẽ hiệu quả hơn nhiều, mặc dù có khả năng gây nhầm lẫn hơn một chút. Xem nó hoạt động như thế nào đối với bạn.

//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. PHP PDO so với mysql_connect bình thường

  2. MYSQL, đặt hàng rất chậm bởi

  3. MySQL:Đánh máy NULL thành 0

  4. Chèn dữ liệu vào cơ sở dữ liệu mysql từ xa bằng phương pháp POST từ thiết bị iOS

  5. Chọn tất cả các điểm không gian địa lý bên trong một hộp giới hạn