2014-12-05 2 views
0

나는 사람들을 친구로 추가하는 기능을 넣은 커뮤니티 웹 사이트를 만들고 있습니다. 이친구 목록에서 친구 표시

+----+---------+-------+ 
| id | ppl_1 | ppl_2 | 
+----+---------+-------+ 
| 1 | 5 | 7 | 
| 2 | 13 | 5 | 
+----+---------+-------+ 

id is simply the autoincrement field. 
ppl_1 is one user's id 
ppl_2 is another user's id 

가 지금은 id가 내 친구 목록을보고 싶어 5 인 사용자입니다 생각처럼

지금 내 친구 테이블이 보인다. 내 ID가 ppl_1 또는 ppl_2 사이에있을 수 있기 때문에 어떻게 해결할 수 있습니까? 2 쿼리를 확인해야합니까? 그건 내가 사이트의 성능을 고려하는 것 같아 나쁜 것입니다 .. 아니면 하나의 쿼리 내에서 두 가지를 확인하기 위해 뭔가를해야합니까?

$me = $_SESSION['id'] ;

누구나 여기 좀 빛을 보여 고려?

+1

'UNION'을 사용하면 1이 'ppl_1'의 친구를 선택하고 두 번째 친구가 'ppl_2'의 친구를 선택하는 2 개의 쿼리를 수행 할 수 있습니다. '친구로 선택 ppl_1 ... UNION ... 친구로 ppl_2 선택 ... ' – Sean

+2

이 문제는 여러 번 해결되었습니다. [sql-join-help-for-friend-list] (대칭 - 대칭 - 다 대다 방법) (http://stackoverflow.com/questions/2203513/sql-join-help-for-friend-list) -many-relationship] (http://stackoverflow.com/questions/3550093/how-to-represent-symmetric-many-to-many-relationship) [how-should-i-design-a-relationship-table-for] -friendship] (http://dba.stackexchange.com/questions/10199/how-should-i-design-a-relationship-table-for-friendship) – abl

답변

0

실제 의미를보다 잘 반영하기 위해 표의 ppl_1 및 ppl_2 열의 이름을 바꾸면 도움이됩니다. 그것 뿐이다

SELECT befriended_by 
FROM user 
INNER JOIN [name of your table above] 
ON user.id = friend 
WHERE user.id = [:id, please use parameterised queries to insert your $_SESSION['id'] here or some other sane method to prevent sql injection attacks ] 

:

당신은 그들에게

는 그런 다음 조인을 실행하는 것 '친구'와 'befriended_by'같은 이름을 수 있습니다.

+0

한 행에 'befriended_by'에 내 ID가 들어 있고 다른 행 '친구'가 내 ID를 포함합니까? 내가 이미 언급했듯이. 내 ID는 테이블 아래쪽에있는 모든 컬럼 중 하나에있을 수 있습니다. 내 ID를 선택하고 다른 사용자의 ID를 선택하고 싶지 않습니다. –

+0

안녕하세요 사니크, 괜찮습니다. 각 열은 다른 기능을 가지고 있습니다. 친구들의 목록을 얻고 싶다면'befriended_by'가 당신의 ID 인'friends' 칼럼의 값에 관심이 있습니다. 누가 친구 목록에 추가했는지 알고 싶다면'befriended_by' 열의 값에 관심이 있습니다. 여기서'friends'는 자신의 ID입니다. abl이 지적한 질문을 확인하면 개념을 명확히하는 데 도움이 될 수 있습니다. –