1

我正在从数据库表中获取一个值,然后根据第一个值获取另一个值。第一部分工作正常。我只是获取组织名称列表并将它们输出到列表中:

$org_name = mysql_query('SELECT org_name FROM Orgs_Teams GROUP BY org_name');
echo "<ul>";
while ($org_row = mysql_fetch_row($org_name)) {
echo "<li>{$org_row[0]}</li>";
}
echo "</ul>";

但这就是我卡住的地方。我现在需要获取每个组织内每个团队的名称。我正在使用一个包含两列的简单数据库表:org_name 和 team_name。

最终,我希望为我的导航菜单提供一个嵌套列表,如下所示(每个组织名称都会重复):

  • 组织名称 1
    • 团队名称 1
    • 团队名称 2
    • 团队名称 3

我一直在搞乱这样的不同查询:
$team_name_query = mysql_query('SELECT team_name FROM Orgs_Teams WHERE org_name = "$org_name" ');

但一直无法得到任何工作。我的想法是团队名称查询将进入“while”循环并创建嵌套列表,但我被卡住了。提前感谢您的帮助。

4

2 回答 2

2

在您的团队表中有一个列,其中包含团队所属的组织 ID 并加入这些表。这可以一次为您提供所有数据

org_id   org_name
-------+---------
   1   |   Org 1
   2   |   Org 2


team_id    team_name    org_id
---------+------------+--------
    1    |   Team 1   |   1
    2    |   Team 2   |   1
    3    |   Team 3   |   2
    4    |   Team 4   |   2

$teams="SELECT * FROM Orgs
INNER JOIN Orgs_Teams USING (org_id)
WHERE org_id=1";

返回

org_id   org_name    team_id    team_name    org_id
-------+-----------+---------+------------+--------
    1  |   Org 1   |    1    |   Team 1   |   1
    1  |   Org 1   |    2    |   Team 2   |   1

然后遍历结果以创建子列表元素,并使用来自第一个(或任何)结果的组织信息来创建父级。

echo '<ul><li>';
$i=0;
while ($row = mysql_fetch_row($teams)) {
    if ($i==0) echo $row['org_name'] .' <ul> ';
    echo '<li>' . $row['team_name'] .'</li>';
}
echo '</li></ul></li></ul>';

您可以使用不带 WHERE 子句的相同查询来获取所有组织和其中的团队,并在迭代时将当前 org_id 与前一个进行比较,以查看是否应该结束您正在填充团队的组织列表项并开始其他 。

于 2012-12-27T01:04:10.387 回答
0

您可以使用嵌套循环,因此在第一个循环的循环中执行第二个查询。另一种是将您的第一个查询的结果推送到一个数组中。然后,您可以循环数组并执行一系列查询。

$org_names = new array();
while ($org_row = mysql_fetch_assoc($org_name)) {
   $org_names = $org_row[];
}

echo "<ul>";
foreach($org_names as $name){
 // Do more queries
}
echo "</ul>";

同样正如刚才提到的,执行JOIN查询可以提取一个记录集中所需的所有数据。就像是:

SELECT A.org_name, B.team_name FROM Orgs_Teams AS A JOIN Orgs_Teams AS B ON A.org_id = B.org_id WHERE A.org_name = '$org_name';
于 2012-12-27T01:07:33.593 回答