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

रिकर्सिव फ़ंक्शन के साथ इको मेनू ट्री

कैसा रहेगा:

function recurse($categories, $parent = null, $level = 0)
{
    $ret = '<ul>';
    foreach($categories as $index => $category)
    {
        if($category['root'] == $parent)
        {
            $ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>';
            $ret .= $this->recurse($categories, $category['id'], $level+1);
            $ret .= '</li>';
        }
    }
    return $ret . '</ul>';
}

इस फ़ंक्शन के लिए आवश्यक है कि आप पहले उपलब्ध श्रेणियों की पूरी सूची के लिए अपने डेटाबेस को क्वेरी करें और मान लें कि आपकी रूट श्रेणियों का मान शून्य है, लेकिन फ़ंक्शन को -1 या 0 स्वीकार करने के लिए बदला जा सकता है, यह इस बात पर निर्भर करता है कि आपकी वर्तमान स्कीमा कैसे काम करती है।

$categories = { get from database into an multi-dimensional array };
$Tree = $this->recurse($categories);
echo $Tree;

माता-पिता के लिए कोई बच्चा मौजूद नहीं होने पर किसी भी खाली यूएल को प्रदर्शित होने से रोकने के लिए आप निम्न कार्य करने पर विचार कर सकते हैं:

function recurse($categories, $parent = null, $level = 0)
{
    $ret = '<ul>';
    foreach($categories as $index => $category)
    {
        if($category['root'] == $parent)
        {
            $ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>';
            $sub = $this->recurse($categories, $category['id'], $level+1);
            if($sub != '<ul></ul>')
                $ret .= $sub;
            $ret .= '</li>';
        }
    }
    return $ret . '</ul>';
}

हालांकि, सबसे अच्छा समाधान यह होगा कि आप अपने डेटा का चयन करके एक कॉलम शामिल करें जिसमें प्रत्येक श्रेणी में कितनी चाइल्ड श्रेणियां हों।

select Category.*, (select count(distinct c1.id) from Category as c1 where c1.root = Category.id) as ChildCount from Category

जिसमें आपका कार्य होगा:

function recurse($categories, $parent = null, $level = 0)
{
    $ret = '<ul>';
    foreach($categories as $index => $category)
    {
        if($category['root'] == $parent)
        {
            $ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>';
            if($category['ChildCount'] > 0)
                $ret .= $this->recurse($categories, $category['id'], $level+1);
            $ret .= '</li>';
        }
    }
    return $ret . '</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 में VARCHAR और TEXT के बीच अंतर

  2. रेल में टेबल कॉलम में हैश वैल्यू कैसे रखें?

  3. सबक्वेरी में दो "WHERE NOT IN" के साथ Laravel Eloquent

  4. उबंटू पर MySQL वर्कबेंच कैसे स्थापित करें

  5. सत्यनिष्ठा बाधा उल्लंघन:1048 कॉलम 'taggable_id' रिक्त नहीं हो सकता