नीचे दिया गया कोड आपको शुरू करना चाहिए। यह एक "पुनरावर्ती कार्य" है - एक ऐसा कार्य जो स्वयं को कॉल करता है। जैसा कि @ Fake51 ने अभी उल्लेख किया है, यह बहुत कुशल नहीं है, लेकिन इसे काम करना चाहिए।
आपके द्वारा तैयार की गई सूची को संरचित करने के लिए आपको कुछ CSS की आवश्यकता होगी।
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();
संपादित करें:चूंकि अभी भी कोई स्वीकृत उत्तर नहीं है, यहां मेरा कोड एक एकल SQL क्वेरी के साथ यह सब करने के लिए संशोधित किया गया है जो संभावित रूप से थोड़ा अधिक भ्रमित होने के बावजूद अधिक कुशल होना चाहिए। देखें कि यह आपके लिए कैसा है।
//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);