나는 데이터베이스에 친구를 저장 (뿐만 아니라)를 사용하여이 테이블을 가지고 :친구
user_1 | user_2 | status
'상태가'-1,0 할 수있는 여기서는 상태가 '0'(사용자 _에 대해 보류 중)이거나 '1'(사용자 _2에 의해 승인 됨) 인 경우 만 고려합니다. 나는 주어진 $ 사용자에 대한 승인/친구 보류 찾기 위해 다음과 같은 쿼리를 가지고 :
SELECT user_1,user_2,status
FROM Friends
WHERE (user_2 = '$user' OR user_1 = '$user') AND status >= 0;
여기서의 목표는 주어진 $의 사용자 2가 $의 공통 (승인) 친구 인 경우도 말할 쿼리를 수정하는 것입니다
user1과 $ user1의 각 (승인 된) 친구.
몇 가지 연구가 끝나면 다른 필드를 NULL (상호없는 경우) 또는 $ user2로 설정하여 왼쪽 조인이 트릭을 수행한다는 것을 알았습니다. 나는 그것을 효율적으로하고 싶다. 몇 번 시도했지만 성공하지 못했습니다.
a | b | 1
c | a | 1
c | b | 1
a | d | 1
내가 'A'의와의 F 각 친구의 친구를 나열 할 : 예를 들어, 우리는 다음과 같은 항목이 있다고 가정 해 봅시다 :
가 EDIT 당신의 도움에 미리으로
감사합니다 'a', 'b'가 f와 'a'의 공통 친구인지 확인하십시오. 또한 상호 테스트의 경우 f =/= b입니다. 이러한 쿼리의 결과는 다음과 같습니다
a | b | 1 | NULL
c | a | 1 | b
a | d | 1 | NULL
당신은 내가 나 자신을 사용하지 않을 것이라고, 그래서 복잡하고 느린 것 MySQL의 쿼리에서와 같이 더 명확하게
나는 그것을 얻지 못한다 :-) 당신은 무엇을 사고 싶습니까? 어쩌면 간단한 예제일까요? –
이고'c |는 어디에 있는가? a | 1 | d'? MySQL에서는 그렇게하지 않지만 PHP 나 다른 언어를 사용하면 MySQL은 더 큰 데이터 세트에서 느려질 것입니다. –
네 번째 필드 shoult는 'b'와의 상호 우정을 테스트하기 때문에, 당신이 자고있는 라인은 나타나지 않아야합니다. 또 다른 가능성은 실제로 PHP에서이를 수행하고 'b'와의 상호 우정을 테스트하기 위해 항목 당 쿼리를 실행하는 것입니다. 하지만이 방법을 여러 번 보내는 것은 좌회전과 함께 하나의 쿼리 만 보내는 속도가 느려지는 것을 두려워했습니다. 하지만 어쩌면 그게 맞을지 모르지만,이 –