2013-07-29 5 views
0

우정 상태로 내 친구의 상호 수를 원합니다. 각 사용자에 대한 노드를 만들고 속성 사이의 관계를 만들었습니다. 나는 다음 쿼리에 따라 원하는 결과를 발견했다. 이 테스트 케이스에서는 로그인 사용자 아이디가 1이고 문자 'dh'로 시작되는 사용자를 검색하려고합니다. 그래서, 내 쿼리는 다음과 같습니다.결과 집합을 결합하십시오

1st Query : which is returned all users with specific given keyword. 
-------------------------------------------------------------------- 
START other=node(*) 
WHERE other.FirstName =~ "(?i)dh.*" AND other.UserID <> 1 
WITH other, me=node:node_auto_index(UserID = '1') 
RETURN other.UserID, other.UserName, other.FirstName, other.LastName, other.ImagePath 
LIMIT 100; 

이 쿼리는 모든 사용자가 이제 'DH' 시작, 내 로그인 사용자 사이의 우정 상태를 원하고이 사용자를 검색 저를 반환합니다. 그래서 다음과 같이 수행했습니다 :

2nd Query : which is returned approvalstatus between user1 and other 
-------------------------------------------------------------------- 
START me=node:node_auto_index(UserID = '1') 
MATCH me-[myR:friends]-(x) 
RETURN x.UserID, myR.ApprovalStatus 
ORDER BY x.UserID 

마지막으로, 다음 쿼리에 따라 사용자 1과 다른 사람들 사이의 상호 친구 수를 필요로합니다.

3rd Query : which is returned mutual count between user1 and other 
------------------------------------------------------------------ 
START me=node:node_auto_index(UserID = '1'), other=node(*) 
MATCH pMutualFriends=me-[r:friends]-mf-[r1:friends]-other 
WHERE r.ApprovalStatus = 1 
AND r1.ApprovalStatus = 1 
AND other.FirstName =~ "(?i)dh.*" AND other.UserID <> 1 
RETURN other.UserID, COUNT(pMutualFriends) AS mutualCount 
ORDER BY other.UserID 

이제 RDBMS에서와 마찬가지로이 쿼리에 모두 참여하고 싶습니다. 첫 번째 결과 집합은 모든 레코드를 반환하고 두 번째 결과는 & 세 번째 결과 집합과 조인해야합니다.

어떻게해야합니까?

답변

2

그래프 db를 쿼리 할 때 알고있는 특정 데이터 조각부터 시작하여 그래프의 바깥 쪽에서 작업해야합니다. START n=node(*) ...을 사용하는 것은 매우 비쌉니다. 사용자의 전체 그래프에서 전체 목록을 반환합니다. 사용자 ID가 1 인 사용자에게만 연결된 사용자 만 필요하기 때문에 원하는 것은 아닙니다.

START me=node:node_auto_index(UserID = '1') 
MATCH me-[r:FRIENDS]-friend-[r1:FRIENDS]-other 
WHERE other.FirstName =~ "(?i)dh.*" AND other.UserID <> 1 
    AND r.ApprovalStatus = 1 AND r1.ApprovalStatus = 1 
    AND NOT (me-[:FRIENDS]-> other) 
RETURN other.UserID, other.FirstName, COUNT(friend) AS MutualCount 

이 친구 dh로 시작하고 그들이 me 공유 상호 친구의 수를 세는 FIRSTNAME이 (other)의 모든 친구를 찾습니다.

또한 이라는 문구를 추가하여 other의 경우도 삭제하고 me의 친구가됩니다.

+0

감사합니다. @ 에드워드, 귀하의 검색어는 매우 유용하게 보입니다. 그러나 한 가지가 빠져 있습니다. 'dh'로 시작하는 이름을 가진 모든 노드가 필요합니다. 여기에 쿼리에서 사용자 1에 연결된 노드 만 반환하고 관계에서 "ApprovalStatus"속성도 필요합니다. 원하는 결과를 얻을 수 있도록 도와 줄 수 있습니까? –

+0

안녕하세요. @edward, 우리는 userid를 사용하여 3 개의 결과 집합 위에 합류 할 수 있습니까? RDBMS가 왼쪽 가입과 같이 그래서 모든 노드는 결과 1의 'ApprovalStatus'와 결과 2의 'MutualCount'를 결과 3에서 가져옵니다. 당신을 기다리고 있습니다. 감사. –

+2

나는 데이터에 대해 묻는 질문을 이해하는 데 어려움을 겪고있다. " 'dh'로 시작하는 이름을 가진 모든 사용자를 찾고 친구를 공유하는 모든 사람과 공통의 친구 수를 반환합니다." – Edward

관련 문제