带有php和mysql的两级子菜单

带有php和mysql的两级子菜单,php,Php,我想使菜单与2级子菜单。最终,HTML应该像下面的代码一样: <ul> <li><a href="#">elektronikos prekes</a> <ul> <li><a href="#">dar kaskas </a> <ul> <li><a href="#

我想使菜单与2级子菜单。最终,HTML应该像下面的代码一样:

<ul>
   <li><a href="#">elektronikos prekes</a>
       <ul>
           <li><a href="#">dar kaskas </a>
               <ul>
                   <li><a href="#">ka ka 2</a></li>
               </ul>
           </li>
           <li><a href="#">tranzistoriai </a>
               <ul>
                   <li><a href="#">sub 1</a></li>
                   <li><a href="#">tikri 1</a></li>
               </ul>
           </li>
      </ul>
 </li>
 <li><a href="#">kompiuteriai</a>
     <ul>
         <li><a href="#">nesiojami 8</a></li>
     </ul>
 </li>
</ul>
这是我的密码:

$queryreg=mysql_query("select distinct a.meniu as meniu , b.sub as sub,  c.sub2 as sub2,a.meniu_id as m_id, b.sub_id as s_id,
c.sub2_id as s_id2, count(distinct p.id) as pre 
from meniu a
LEFT OUTER JOIN sub AS b ON ( a.meniu_id = b.meniu_id and b.rodyti='1' )
LEFT OUTER JOIN preke AS p ON ( b.sub = p.sub and a.meniu=p.meniu)
LEFT OUTER JOIN sub2 AS c ON ( b.sub_id = c.sub_id AND c.rodyti='1')
LEFT OUTER JOIN preke AS pr ON ( pr.sub2 = c.sub2 and pr.sub=b.sub and pr.meniu=a.meniu)
where a.rodyti='1' and a.meniu='elektronikos prekes' or a.meniu='kompiuteriai'
group by a.meniu, a.meniu_id, b.sub, b.sub_id, c.sub2, c.sub_id");
$AnkstesnisSub='';
$ankstesnisMeniu='';
$output = $ankstesnisMeniu.$AnkstesnisSub = '';
echo'<ul>';
while ($row = mysql_fetch_assoc ($queryreg))
{
    if ($row['meniu'] != $ankstesnisMeniu )
    {
        if (!empty ($ankstesnisMeniu) )
        {
            $output .= " </ul></li></ul></li>";
        }
        $output .= '<li><a href="#">' . $row['meniu'] . "</a><ul>";
        $ankstesnisMeniu = $row['meniu'];
    }
    if ( $row['sub'] != $AnkstesnisSub)
    {
        if (!empty ($AnkstesnisSub))
        {
            $output .= "</ul></li>";
        }
        if($row['sub2']==NULL){$prekiu_kiekis = $row['pre'];}
        elseif($row['sub2']!=NULL){$prekiu_kiekis ='';}
        $output .= '<li><a href="#">' . $row['sub'] . " $prekiu_kiekis</a><ul>";
        $AnkstesnisSub = $row['sub'];
        $prevID2 = $row['s_id'];
    }
    if($row['sub2']!=NULL){$prekiu_kiekis = $row['pre'];}
    elseif($row['sub2']==NULL){$prekiu_kiekis ='';}
    $output .= '<li><a href="#">' . $row['sub2'] ." $prekiu_kiekis</a></li>";
    $prevID3=$row['sub2'];
}
$output = '' . $output . "</ul></li></ul></li>";        
echo"$output";
echo'</ul>';
但我得到:

 <ul>
     <li><a href="#">elektronikos prekes</a>
         <ul>
             <li><a href="#">dar kaskas</a>
                  <ul>
                      <li><a href="#">ka ka 2</a></li>
                  </ul>
             </li>
             <li><a href="#">tranzistoriai</a>
                  <ul>
                      <li><a href="#">sub 1</a></li>
                      <li><a href="#">tikri 1</a></li>
                  </ul>
             </li>
        </ul>
   </li>
   <li><a href="#">kompiuteriai</a>
       <ul></ul>
   </li>
   <li><a href="#">nesiojami 8</a>
       <ul>
           <li><a href="#"></a></li>
       </ul>
   </li>
 </ul>
 </li></ul>

对于第一个菜单项,一切正常,但第二个菜单项错误。也许有人能帮我吗?

我认为这是一个非常复杂的代码,为什么不把它分成两个表呢

顶部菜单=>链接id、href、链接文本、计数子项

子菜单=>link\u id,parent\u id,href,link\u text,count\u sub

获取菜单的代码:

$query = mysql_query("SELECT * FROM top_menu");
while ( $row = mysql_fetch_assoc($queryreg) ) 
     {
        echo '<li>' . $row['href'] . '</li>';
        if( $row['subcount'] != 0 ) {
            { make query for the sub_menu and do more while... and in the while you can add more }
        }
     }

等等。。我认为它更简洁。

您不应该将HTML连接与代码混合使用。分两步运行:第一步获取数据,使用它,第二步:以您想要的方式将其转换为HTML,但不要将两者混合使用。想想有一天你需要输出Json而不是HTMLTanks来提供帮助。我发现我的密码有误。现在一切都好了。