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

Hệ thống phân cấp hiệu quả hơn

Tôi đoán điều gì đó dọc theo những dòng này nên làm (chưa được kiểm tra, phải được điều chỉnh cho phù hợp với nhu cầu của bạn):

$q = mysql_query("SELECT id, parent_id, name FROM categories");
while ($r = mysql_fetch_row($q)) {
  $names[$r[0]] = $r[2];
  $children[$r[0]][] = $r[1];
}

function render_select($root=0, $level=-1) {
  global $names, $children;
  if ($root != 0)
    echo '<option>' . strrep(' ', $level) . $names[$root] . '</option>';
  foreach ($children[$root] as $child)
    render_select($child, $level+1);
}

echo '<select>';
render_select();
echo '</select>';

một cách thậm chí còn thú vị hơn để làm điều này là sử dụng các thủ tục được lưu trữ trong SQL, nhưng nó có thể là quá mức cần thiết trong trường hợp này ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLSTATE [HY000] [1040] Quá nhiều kết nối

  2. Kiểm tra NULL trên một Bộ sưu tập trong các truy vấn JPQL?

  3. Hibernate OnDelete Cascade không hoạt động cho MySql nhưng hoạt động trên postgres và Ms-Sql

  4. Lưu trữ nội dung của một mảng PHP trong cơ sở dữ liệu MySQL

  5. mysql GROUP_CONCAT trùng lặp