这个问题有两个部分。任何一个部分的答案都很棒: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 :(得分:0)
子查询可能会有所帮助,因此可以避免第一部分:
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
上的更多信息。