2011-01-23 14 views
0

この質問は2つの部分があります。 DPHPのmysqlクエリのクエリ:D

1)私は別のテーブルの値の間のリンクを格納するために1つのテーブルを使用しています。私はそのテーブルを検索して継承リストを探しています。

while($cont) { 
     $rst = DB::query("SELECT parentID FROM code_inheritance WHERE childID=".$sid); 
     if($rst->num_rows != 0) { 
      $ob = $rst->fetch_object(); 
      if($list != '') $list .= ','; 
      $list .= $ob->parentID; 
      $sid = $ob->parentID; 
     } else $cont = false; 
    } 

DBは私のデータベースクラスです。 しかし、これはデータベースを効率的に検索する方法ではありません。誰も私が1つのデータベースクエリでこれを行うことができる方向に私を指すことができますか?

2)次にリストを使用してクラスの名前を検索し、継承リストを画面にエコーすることができますが、ID番号順に返されますパート1で私は現在、これをやっている:継承ツリーが正しい順序になるよう

if($list != '') { 
     $rst = DB::query("SELECT Name FROM code WHERE ID IN ($list)"); 
     $list = ''; 
     while($ob = $rst->fetch_object()) { 
      echo $ob->Name; 
      if($list != '') $list .= ' -> '; 
      $list .= '<a href="/code/'.$ob->Name.'/">'.$ob->Name.'</a>'; 
     } 
     $list = "Inheritance -> ".$list; 
    } 

は、どのように私は、リストを取得することができますために、私は、第一部でそれらを見つけましたか?

申し訳ありませんが、これは少し時間がかかりましたが、可能な限り多くの情報を追加したいと考えていました。

+0

私はあなたの質問に関連するDBスキーマに関する情報を更新したいと思うでしょう - 上記を1つのクエリに組み合わせることができるはずです。 –

+0

これは正しい方向にあなたを押し進めるかもしれません:http://www.sqlteam.com/article/more-trees-hierarchies-in-sql –

答えて

0

サブクエリは役に立ちそう最初の部分をaviodできます

SELECT Name FROM code WHERE ID IN 
    (SELECT parentID FROM code_inheritance WHERE childID='$sid') 

これは、内側のクエリ内のすべてのあなたのparentIDを選択し、code.nameを見つけるためにこれを使用します。 INを使用すると、特定の順序を持​​たない単なるセットであるため、正しい順序が返されない場合があります。したがって、「注文可能な」列を追加する必要があります。

1つのクエリ内のすべてのIDをリストとして取得するには、GROUP_CONCAT、詳細はMySQL manual about group byを使用します。