php mysql查询查询:D

时间:2011-01-23 14:09:10

标签: php 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;
    }

如何按照我在第一部分中找到的顺序获取列表,以便继承树的顺序正确?

很抱歉这有点长,但我想尽可能多地添加信息。

1 个答案:

答案 0 :(得分:0)

子查询可能会有所帮助,因此可以避免第一部分:

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

这将选择内部查询中的所有parentID,然后使用此选项查找code.name。使用IN可能不会返回正确的顺序,因为它只是一个没有特定顺序的集合。所以你应该添加一些“可订购的”列。

要将一个查询中的所有ID作为列表,您可以使用GROUP_CONCATMySQL manual about group by上的更多信息。