开发者

MySQL 1 to many. Display only 1 result from the first table

EXAMPLE CODE

<?php
require_once('class_library/pdo.php');
$pdoConnection = new sdb('web_structure');
$select = $pdoConnection->query("SELECT main_menu.href AS main_href
    , main_menu.link_name AS main_link
    , sub_menu.href AS sub_href
    , sub_menu.link_name AS sub_link
  FROM main_menu
  LEFT JOIN sub_menu ON main_menu.id = sub_menu.main_menu_id 
  ORDER BY main_menu.position ASC");

while($row = $select->fetch())
{
    $href = $row["main_href"];
    $link_name = $row["main_link"];
    $sub_href = $row["sub_href"];
    $sub_link_name = $row["sub_link"];  

//MAIN MENU (display only once)
    echo "      <li><a href=\"$href\">$link_name</a>\n";

//SUB MENU (show all related results)
    echo "       <ul>\n";
    echo "        <li><a href=\"$sub_href\">$sub_link_name</a></li>\n";
    echo "       </ul>\n";
    echo "      </li>\n";
}
?>
开发者_Go百科

OUTPUT

Services

- service 1

Services

- service 2 ...etc

Products

- product 1

Products

- product 2 ...etc


I would like

Services

- service 1

- service 2

Products

- product 1

- product 2


<?php
require_once('class_library/pdo.php');
$pdoConnection = new sdb('web_structure');
$select = $pdoConnection->query("SELECT main_menu.href AS main_href
    , main_menu.link_name AS main_link
    , sub_menu.href AS sub_href
    , sub_menu.link_name AS sub_link
  FROM main_menu
  LEFT JOIN sub_menu ON main_menu.id = sub_menu.main_menu_id 
  ORDER BY main_menu.position ASC, main_menu.id ASC");

$p_link_name = '';
while($row = $select->fetch())
{
    $href = $row["main_href"];
    $link_name = $row["main_link"];
    $sub_href = $row["sub_href"];
    $sub_link_name = $row["sub_link"];  

//MAIN MENU (display only once)
    if ($p_link_name !== $link_name) {
        echo "      <li><a href=\"$href\">$link_name</a>\n";
    }

//SUB MENU (show all related results)
    echo "       <ul>\n";
    echo "        <li><a href=\"$sub_href\">$sub_link_name</a></li>\n";
    echo "       </ul>\n";
    if ($p_link_name !== $link_name) {
         echo "      </li>\n";
    }
    $p_link_name = $link_name;
}
?>


Couldn't you do something like this?

$select = $pdoConnection->query("
    SELECT
        main_menu.href AS main_href,
        main_menu.link_name AS main_link
    FROM
        main_menu
    ORDER BY
        main_menu.position ASC");

while( $row = $select->fetch() ) {

    $href = $row["main_href"];
    $link_name = $row["main_link"];

    $subSelect = $pdoConnection->query("
        SELECT
            sub_menu.href AS sub_href,
            sub_menu.link_name AS sub_link
        FROM
            sub_menu
        WHERE
            main_menu_id = {$row['id']}");

    while( $subRow = $subSelect->fetch() ) {

        $sub_href = $subRow["sub_href"];
        $sub_link_name = $subRow["sub_link"];
    }

    // Output...
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜