访问PHP / MySQL查询中的动态值

时间:2012-12-27 00:54:24

标签: php mysql

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

$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。

最终,我希望我的导航菜单有一个嵌套列表(对于每个组织名称都会重复):     

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

我一直在搞乱这样的不同问题:
    $ team_name_query = mysql_query('SELECT team_name FROM Orgs_Teams WHERE org_name =“$ org_name”');

但是还没有能够得到任何工作。我的想法是团队名称查询将进入'while'循环并创建嵌套列表但我被卡住了。提前感谢您的帮助。

2 个答案:

答案 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';