Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

PHP / MySQL बिल्ड ट्री मेनू

मुझे @ मारियो का समाधान पसंद है, और अतिरिक्त <ul> की रोकथाम के साथ इसमें सुधार किया है . मैं केवल ORDER BY करने की अनुशंसा करता हूं मेनू को अपने इच्छित क्रम में प्राप्त करने के लिए अपनी SQL क्वेरी पर (स्कीमा में वज़न/अनुक्रम कॉलम जोड़ने की अनुशंसा भी कर सकते हैं।

डेटा सेटअप:

$menu = array( // Presumed to have been coming from a SQL SELECT, populated for demo.
  array('id'=>1,'title'=>'Menu 1',          'parent_id'=>null),
  array('id'=>2,'title'=>'Sub 1.1',         'parent_id'=>1),
  array('id'=>3,'title'=>'Sub 1.2',         'parent_id'=>1),
  array('id'=>4,'title'=>'Sub 1.3',         'parent_id'=>1),
  array('id'=>5,'title'=>'Menu 2',          'parent_id'=>null),
  array('id'=>6,'title'=>'Sub 2.1',         'parent_id'=>5),
  array('id'=>7,'title'=>'Sub Sub 2.1.1',   'parent_id'=>6),
  array('id'=>8,'title'=>'Sub 2.2',         'parent_id'=>5),
  array('id'=>9,'title'=>'Menu 3',          'parent_id'=>null),
);

हैंडलिंग:

function has_children($rows,$id) {
  foreach ($rows as $row) {
    if ($row['parent_id'] == $id)
      return true;
  }
  return false;
}
function build_menu($rows,$parent=0)
{  
  $result = "<ul>";
  foreach ($rows as $row)
  {
    if ($row['parent_id'] == $parent){
      $result.= "<li>{$row['title']}";
      if (has_children($rows,$row['id']))
        $result.= build_menu($rows,$row['id']);
      $result.= "</li>";
    }
  }
  $result.= "</ul>";

  return $result;
}
echo build_menu($menu);

आउटपुट:

<ul>
  <li>Menu 1<ul>
    <li>Sub 1.1</li>
    <li>Sub 1.2</li>
    <li>Sub 1.3</li>
  </ul></li>
  <li>Menu 2<ul>
    <li>Sub 2.1<ul>
      <li>Sub Sub 2.1.1</li>
    </ul></li>
    <li>Sub 2.2</li>
  </ul></li>
  <li>Menu 3</li>
</ul>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में डेटाटाइम फ़ील्ड में NULL मान कैसे स्टोर करें?

  2. एक MySQL/MariaDB डेटाबेस निर्यात करें

  3. MySQL क्वेरी में IF कंडीशन के साथ गिनें

  4. MySQL इवेंट शेड्यूलर प्रतिदिन एक विशिष्ट समय पर

  5. दूसरा उच्चतम वेतन सर्वोत्तम संभव तरीके खोजें