具有连接2表的PDO Sql查询返回一行

时间:2014-06-06 15:05:02

标签: php mysql sql pdo inner-join

我试图制作一个下拉菜单。菜单从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个父菜单项,如上所示。任何帮助都会大大增加。

2 个答案:

答案 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();
?>