我需要遍历由属性'依赖'为'true'的边连接的所有顶点
这是我到目前为止所做的:
SELECT
FROM (TRAVERSE *
FROM (SELECT outE() FROM 9:5)
WHILE (@class = 'E' AND dependence = 'yes') OR @class = 'V')
WHERE @class = 'V'
虽然我不确定是否是最好的方法,但这似乎只能在边缘有'依赖'='是'的路径上正常工作。
现在,可能会生成多个路径,我需要从每个路径/分支获取最后一个顶点。
traverserdVertex(-1) 应该返回最后一个,但是我猜这是来自整个遍历所以不好。 (看起来它有一个bug,因为它检索了多个)
外部 SELECT 返回整个顶点包,所以我想也许找到那些没有 dependent ='yes'的外向边缘的顶点可能会解决它,虽然我不确定如何做得很好。
SOLUTION:
SELECT
FROM (TRAVERSE *
FROM (SELECT outE() FROM 9:5)
WHILE (@class = 'E' AND dependence = 'yes') OR @class = 'V')
WHERE @class = 'V' AND NOT (outE() contains (dependence='yes'))
这有效地返回每个分支的最后一个顶点。我对任何其他选项持开放态度,我想知道它是否可以改进。
答案 0 :(得分:2)
我通过构建以下图表尝试了一个例子
javascript函数" myFunction"有三个参数,即ridVertex,属性和值
var g=orient.getGraph();
var previous=[];
var currently=[];
var node=[];
var b=g.command("sql","select from v where @rid =" + ridVertex);
if(b.length>0){
previous.push(b[0]);
node.push(b[0]);
do{
for(i=0;i<previous.length;i++){
var edges=g.command("sql","select expand(outE()) from V where @rid = "+ previous[i].getId());
var myVertex=[];
for(j=0;j<edges.length;j++){
var edge=edges[j];
var dependence=edge.getProperty(property);
if(dependence==value){
var vIn=edge.getProperty("in");
myVertex.push(vIn);
}
}
if(myVertex.length>0){
setPaths();
}
}
change();
}while(previous.length>0);
}
return node;
function setPaths(){
for (m = 0; m < node.length; m++) {
var lastId=node[m].getId().toString();
var idOut=previous[i].getId().toString();
if (lastId==idOut) {
for(r=0;r<myVertex.length;r++){
var vertex=myVertex[r];
node.push(vertex);
currently.push(vertex);
}
node.splice(m,1);
break;
}
}
}
function change(){
previous=[];
for (indice=0;indice<currently.length;indice++)
previous.push(currently[indice]);
currently=[];
}
使用以下命令
select expand(result) from (select myFunction("#9:0","dependence","yes") as result)
路径是A - &gt; D和A - &gt; B - &gt; C - &gt; G然后将返回椎骨D和G
答案 1 :(得分:0)
以下是@ sebastian解决方案的略微简化,使用Allesandro的图表(dependentOn.value为0或1):
jquery.jqGrid.js