使用mysql创建一个动态菜单,即子元素

时间:2012-08-05 17:17:50

标签: php mysql html

很抱歉,如果我的标题已关闭,我不确定我要做的技术术语是什么。话虽如此,我正在尝试做的是构建一个从mysql查询填充的手风琴样式菜单。菜单的第一部分将只包含一个团队名称列表,该列表将来自一个选择所有团队名称并构建菜单的查询:

$result = mysql_query("SELECT * FROM SportsByTeam");


<ul class='nav nav-list'>
<?php
while($row = mysql_fetch_array($result))
  {
?>
<li>
<a href="<? echo $row['seo_team']?>"> <?php echo $row['team'] ?> </a>
</li>
<?php
} ?>

这适用于我正在尝试构建的菜单的顶级。我完全坚持的是如何合并菜单的手风琴(底层)。我想要发生的是当有人点击上面查询生成的团队时,属于该团队的玩家列表将会下降。为了清楚起见,我不是在问如何从html / css角度创建手风琴菜单,我问的是如何基于mysql查询创建一个动态的手风琴菜单。我为这部分提出的查询是:

SELECT PlayerByTeam.team_name AS TeamName, SportsByTeam.seo_team, PlayerByTeam.first_name, PlayerByTeam.last_name

FROM PlayerByTeam

inner join SportsByTeam ON PlayerByTeam.team_name = SportsByTeam.team

但这就是我能得到的。如何将两个查询的结果合并到一个动态菜单中?看起来像是:

<ul>
<li> Team Name 1 </li>
<ul>
<li> Player Name 1 </li>
<li> Player Name 2 </li>
</ul>
<li> Team Name 2 </li>
..etc
</ul>

(我真的很感谢你的帮助。所以我帮助我学到了很多东西。我希望有一天很快能回馈社区。)

1 个答案:

答案 0 :(得分:0)

您可以选择所有玩家并由他们的团队订购。然后,每次团队名称更改时,都需要执行新元素。

一些伪代码:

while($row = get_row()) {
    if (team_has_changed($row)) {
        if (there_was_a_previous_team()) {
            end_previous_team();
        }
        start_new_team();
    }
    process_team_member($row);
}    
if (there_was_a_previous_team()) {
    end_previous_team();
}

这个非常富有表现力的代码,我在之前的一些答案中概述了一个while循环,你可以在这里找到它:https://stackoverflow.com/a/11616884/367456

然后,您可以将这种分组包装到一些允许您进行简单使用的迭代器组件中(您应该在这里使用Mysqli或PDO,因为它们具有可以迭代的结果)。我在前一个已经有一些代码示例的答案中证明了这一点:https://stackoverflow.com/a/11619281/367456

它通过为每个级别提供一个迭代器来简化问题,而在开始时,您只需查询数据库并从中获取一个结果。