我正在努力从数据库表中获取值,然后根据第一个值获取另一个值。第一部分工作正常。我只是获取组织名称列表并将它们输出到列表中:
$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&amp; TEAM_NAME。
最终,我希望我的导航菜单有一个嵌套列表(对于每个组织名称都会重复):
我一直在搞乱这样的不同问题:
$ team_name_query = mysql_query('SELECT team_name FROM Orgs_Teams WHERE org_name =“$ org_name”');
但是还没有能够得到任何工作。我的想法是团队名称查询将进入'while'循环并创建嵌套列表但我被卡住了。提前感谢您的帮助。
答案 0 :(得分: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与之前的org_id进行比较,以查看是否应该结束您填充的组织列表项团队并开始另一个。
答案 1 :(得分: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';