2012-12-27 38 views
1

我正在從數據庫表中獲取值,然後根據第一個值獲取另一個值。這第一部分工作正常。我剛剛得到組織名稱列表並將它們輸出到列表中:在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 & team_name。

最終我期待有一個嵌套的名單像這樣我的導航菜單(這被重複每一個組織名稱):

  • 組織名稱1
    • 隊名1
    • 隊名2
    • 隊名3

我一直在搞這樣的不同查詢:
$ team_name_query = mysql_query('SELECT team_name FROM Orgs_Teams WHERE org_name =「$ org_name」');

但一直沒有能夠得到任何工作。我的想法是,團隊名稱查詢會進入'while'循環並創建嵌套列表,但我被卡住了。預先感謝您的幫助。

回答

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看你是否應該結束組織列表項你正在與團隊合作並開始另一項工作。

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