2011-01-23 152 views
0

這個問題有兩個部分。對任何一個部分的答案將是偉大的:Dphp mysql查詢查詢:D

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是我的數據庫類。但是,這不是一種搜索數據庫的非常有效的方法。任何人都可以指出我可以在一個數據庫查詢中做到這一點的方向嗎?

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

我會試圖用涉及的數據庫模式信息更新您的問題 - 您應該能夠將上述內容合併爲一個查詢。 – 2011-01-23 14:12:55

回答

0

一個子查詢可能是有用的,這樣aviod第一部分:

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

這將選擇所有parentID在內部查詢,然後用它來尋找code.name。使用IN可能不會返回正確的順序,因爲它只是一個沒有特定順序的集合。所以你應該添加一些「可訂購」的列。

要獲取一個查詢中的所有ID作爲列表,您可以使用GROUP_CONCAT,更多信息請登錄MySQL manual about group by