我有一個圖,其中我有以下結構的結果: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:謝謝你指出。 –