我有一个图,其中我有以下结构的结果:Neo4j的Cypher支架的查询:萨姆两个查询
节点:
- 页(BLUE) - >按照所有者关系,将页面附加到讲座节点和讲座中。
- 讲座系列(紫色) - >连接lectureSeries的由seriesof关系
- 讲座(GREEN)讲授 - 如上所述连接到页面和lectureSeries的>讲座。讲座有财产作为公共,追随者,私人和特权 其中一个讲座即lect1通过特权与用户连接。
- 用户(RED)(这里命名为Ann) - 它通过以下关系连接到页面,并连接到上面提到的1个讲座。
初始条件:
我们必须始终为用户显示所有的公共和跟随者的演讲,我们有没有问题,我们得到所需要的结果的完美查询。
MATCH
(o:page{name:'engg'})-[r:ownerof]-(n:lectureseries)-[s:seriesof]-(l:lecture)
WHERE l.privacy='public' or l.privacy='follower'
RETURN DISTINCT n.name as name,n.series_name as title, COUNT(l) AS lecturecount
结果:
name lecturecount
java 2 (lect3, lect4)
问题:现在,我们要添加这些讲座的次数,如果特权讲座由关系连接到用户特权
我试过这个查询:
OPTIONAL MATCH (o:page {name:'engg'})-[r:ownerof]-(n:lectureseries)-[s:seriesof]-(l:lecture)
WHERE l.privacy='public' or l.privacy='follower'
RETURN DISTINCT n.name as name, COUNT(l) AS lecturecount
UNION
OPTIONAL MATCH (o:page {name:'engg'})-[r:ownerof]-(n:lectureseries)-[s:seriesof]-(l:lecture)-[:privileged]-(u:user {name:'Ann'})
RETURN DISTINCT n.name as name, COUNT(l) AS lecturecount
个
结果:
name lecturecount
java 2
java 1
但结果应该是一个单行:Java,第3
我搜索了很多,最后到UNION
条款,但它没有帮助。
新的问题:
如何总结结果作为
seriesname lecturecount seriescount lecturecount
java 2 AS 2 3
dotnet 1
请小心使用WITH并保留查询中较早部分的变量范围。你的可选匹配与变量'n'相匹配,但是'n'不在范围内,因为它没有被带入WITHs ...'n'而是绑定到通过':seriesof'关系连接的任何东西讲座,它只是工作得很好,因为在您的示例数据集中只有一个':lectureseries'。 – InverseFalcon
编辑后的查询完成了这个技巧。现在看起来很不错。 – InverseFalcon
@InverseFalcon:谢谢你指出。 –