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