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 の 2 つの列を持つ単純なデータベース テーブルを使用しています。

最終的には、次のようなナビゲーション メニューのネストされたリストを探しています (組織名ごとに繰り返されます)。

  • 組織名 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 を以前の組織 ID と比較して、チームを入力している組織リスト アイテムを終了して開始する必要があるかどうかを確認できます。別 。

于 2012-12-27T01:04:10.387 に答える
0

ネストされたループを使用できるため、最初のループのループ内で 2 番目のクエリを実行できます。もう 1 つは、最初のクエリの結果を配列にプッシュすることです。その後、配列をループして、一連のクエリを実行できます。

$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クエリを実行すると、1 つのレコードセットに必要なすべてのデータを取得できます。何かのようなもの:

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 に答える