(client)-[:listens]->(album)-[:contains]->(song)
は私の関係です。どのくらいの数の異なる曲がクライアントによって聴かれているかをID 4(f.e.)の曲で聴いたことが分かります。サイファーのネストされたMATCH文
SQLでは、ダブルネストされたJOIN
とSELECT
で簡単に達成できましたが、私はCypher
の初心者ですから、ちょっと迷っています。シナリオは以下の通りである。
- ID 4
- 前のステップで見つかったクライアントからのを聞いてきたすべての曲を、入手して、曲を聴いているクライアント(そのID)の検索、およびそれらを返します(およびそれらの数も同様)。
は、私は次のようになめらかで始めてみました:
明らかに動作しませんでしたMATCH (c:Client)--(a:Album)--(s:Song)
WHERE s.songID = "4"
WITH a, s, {cID: c.clientID} AS clientsIDs
MATCH (c {clientID: clientsIDs})-[:LISTENS]->(a)-[:CONTAINS]->(s)
WITH COUNT(s) AS songsCount, COLLECT(s) as songs
RETURN songs, songsCount
:
MATCH (c:Client)--(a:Album)--(s:Song)
WITH a, s, {cIDs: c.clientID} AS clientsIDs
// MATCH that gets all songs in albums listened by clients WHERE c.clientID IN clientsIDs -- how to make that?
WITH COUNT(s), COLLECT(s) as songs
WHERE s.songID = "4"
RETURN songs
これは、別の試みでした。
私はちょうど私があなたが物事を過度に複雑かもしれないと思う...私は別のMATCH
ステートメントにclientsIDs
を渡す部分の周り
は、あなたのsongIDプロパティがintまたは文字列として書かれていますか?それが文字列でない場合、これらの引用符は0の一致となります。 –