2011-01-23 150 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