我试图制作一个下拉菜单。菜单从mysql表中获取值。 我使用2个表,第一个是主菜单项,第二个是页面,并且在菜单中与父类别嵌套。所以我的菜单看起来像这样;
<ul>
<li>MAIN MENU - 1 <!-- from menu table -->
<ul>
<li>SUB MENU - 1 - 1</li><!-- from sayfalar table -->
</ul>
</li>
<li>MAIN MENU - 2 <!-- from menu table -->
<ul>
<li>SUB MENU - 2-1</li><!-- from sayfalar table -->
</ul>
</li>
</ul>
我的mysql数据库中有2个表名为:&#39; menu&#39; = parent和&#39; sayfalar&#39; = children。
sayfalar表结构:
sayfa_id | sayfa_foto | sayfa_ad_dil1 | sayfa_ad_dil2 | sayfa_detay_dil1 | sayfa_detay_dil2 | ust_menu_id
---------------------------------------------------------------------------------------------------------
1 | NULL | HAKKIMIZDA | ABOUT US | DENEME | LOREM IPSUM | 2
---------------------------------------------------------------------------------------------------------
菜单表格结构
menu_id | menu_ad_dil1 | menu_ad_dil2 | menu_order
--------------------------------------------------
1 | ANASAYFA | HOMEPAGE | 1
--------------------------------------------------
2 | KURUMSAL | CORPORATE | 2
--------------------------------------------------
3 | BLA BLA | BLA BLA | 3
--------------------------------------------------
4 | LOREM | IPSUM | 4
--------------------------------------------------
5 | İLETİŞİM | CONTACT | 5
--------------------------------------------------
使用PDO的mysql查询看起来像;
<?php
// PDO Sorgu Hazırla
$query = $db->prepare
('SELECT menu.*, sayfalar.ust_menu_id, sayfalar.sayfa_id
FROM menu
INNER JOIN sayfalar
ON menu.menu_id = sayfalar.ust_menu_id ORDER BY `menu`.`menu_order` ASC');
// PDO Sorguyu Çalıştır
$query->execute();
?>
并如下所示回应;
<?php
while ($row = $query->fetch(PDO::FETCH_OBJ))
{
echo '<li class="pi"><a href="link.php?i='.$row->menu_id.'"><span>'.$row->menu_ad_dil2.'</span></a>';
echo '<ul class="pi-submenu pi-has-border pi-items-have-borders pi-has-shadow pi-submenu-dark">';
echo '<li class="pi"><a href="urun-detay.php?i='.$row->sayfa_id.'"><span>'.$row->menu_ad_dil2.'</span></a></li>';
echo '</ul>';
echo '</li>';
}
?>
不幸的是,它只返回了一行。我在菜单表中有5个父菜单项,如上所示。任何帮助都会大大增加。
答案 0 :(得分:1)
您需要检查何时更改&#34;菜单&#34;表名,因为现在您将结果中的每一行视为其自己的父/子条目。例如你想要的东西(伪代码):
$previous = null;
while ($row = $query->fetch(PDO::FETCH_OBJ)) {
if ($row['menu.name'] != $previous) {
got a "new" menu entry
echo "<ul><li>', $row['menu.name'], '<ul>';
$previous = $row['menu.name']; // save for next iteration
}
echo '<li>', $sayfalar, '</li>';
}
答案 1 :(得分:1)
试试这个
<?php
// PDO Sorgu Hazırla
$query = $db->prepare
('SELECT distinct menu.*, sayfalar.ust_menu_id, sayfalar.sayfa_id
FROM menu
LEFT OUTER JOIN sayfalar
ON menu.menu_id = sayfalar.ust_menu_id ORDER BY `menu`.`menu_order` ASC');
// PDO Sorguyu Çalıştır
$query->execute();
?>