3

是否可以通过带有 where 子句的“属性”和结果的“索引/位置”来排序?

我的意思是,当使用 order 进行排序时,我们需要能够知道结果在排序中的位置。

想象一个有 100 万个用户节点的记分牌,我在用户 node.score 上进行排序,其中“name = user_name”,我不知道用户的当前排名。我找不到如何使用 order by ...

    start game=node(1)
    match game-[:has_child_user]->user
    with user
    order by user.score
    with user
    where user.name = "my_user"
    return user , "the position in the sort";

预期的结果是:

节点用户 | 秩

(我不想在客户端获取一百万个条目来了解 ORDER BY 中节点的当前等级/位置!)

4

1 回答 1

3

目前在 Cypher 中不存在此功能。你有一个例子说明这在 SQL 中会是什么样子吗?以下是否符合要求?(只是一个草图,不工作!)

(你的代码)

start game=node(1)
match game-[:has_child_user]->user
with user
order by user.score

(+此代码)

with user, index() as rank
return user.name, rank; 

如果您有更多想法或想开始对此进行破解,请在https://github.com/neo4j/neo4j/issues打开一个问题

暂时有一个解决方法,你可以做:

start n=node(0),rank_node=node(1) 
match n-[r:rank]->rn 
where rn.score <= rank_node.score 
return rank_node,count(*) as pos;

有关实时示例,请参见:http ://console.neo4j.org/?id=bela20

于 2013-05-27T11:47:18.463 回答