사용자가 서로 음악을 추천 할 수있는 응용 프로그램을 구축 중이며 사용자 자체가 참여하는 권장 사항 스트림을 반환하는 쿼리를 작성하는 데 문제가 있습니다. ,뿐만 아니라 사용자의 친구 중 하나. 이건 내 테이블 구조입니다 :활동 스트림/피드에 대한 SQL 쿼리 관련 문제
권장
ID Sender Recipient [other columns...]
-- ------ --------- ------------------
r1 u1 u3 ...
r2 u3 u2 ...
r3 u4 u3 ...
사용자
ID Email First Name Last Name [other columns...]
--- ----- ---------- --------- ------------------
u1 ... ... ... ...
u2 ... ... ... ...
u3 ... ... ... ...
u4 ... ... ... ...
관계
ID Sender Recipient Status [other columns...]
--- ------ --------- -------- ------------------
rl1 u1 u2 accepted ...
rl2 u3 u1 accepted ...
rl3 u1 u4 accepted ...
rl4 u3 u2 accepted ...
그래서 ('U1'친구입니다) 사용자 'U4'에 대한, u4와 관련된 권장 사항의 '스트림'을 쿼리하고 싶습니다. 이 스트림에는 보낸 사람 또는받는 사람이 u4 인 모든 권장 사항과 보낸 사람 또는받는 사람이 u1 (친구) 인 모든 권장 사항이 포함됩니다.
이것은 내가 지금까지 쿼리에 대해 무엇을 가지고 :
SELECT * FROM recommendations
WHERE recommendations.sender IN
(SELECT sender FROM relationships WHERE recipient='u4' AND status='accepted'
UNION
SELECT recipient FROM relationships WHERE sender='u4' AND status='accepted')
OR recommendations.recipient IN
(SELECT sender FROM relationships WHERE recipient='u4' AND status='accepted'
UNION
SELECT recipient FROM relationships WHERE sender='u4' AND status='accepted')
UNION
SELECT * FROM recommendations
WHERE recommendations.sender='u4' OR recommendations.recipient='u4'
GROUP BY recommendations.id
ORDER BY datecreated DESC
내가 볼 수있는 (I 더 SQL 전문가는 아니지만)까지, 작동하는 것 같다 어느. 주어진 사용자에게 '관련성이있을 것'인 Recommendations 테이블의 모든 레코드를 반환합니다. 그러나 이제는 사용자 테이블에서도 데이터를 가져 오는 데 문제가 있습니다. 권장 사항 테이블에는 보낸 사람과받는 사람의 ID (외래 키)가 있지만, 각 사람의 성과 이름도 얻고 싶습니다. 나는 일종의 JOIN이 필요하다고 생각하지만 진행 방법을 놓치고 도움을 청했습니다. (또한 현재 질의에서 누군가가 개선의 여지가있는 부분을 발견하면 나는 모든 귀입니다.)
고마워요!
자신 만의 서비스 대신 타사 서비스를 사용할 수 있다면 http://www.collabinate.com은 이와 같은 문제를 해결하는 더 쉬운 방법 일 수 있습니다. – Mafuba
누구나 지금이 문제를 우연히 만난 적이 있습니다. – blabus
하하 ... 이유를 설명해 주시겠습니까? – Mafuba