2011-08-02 6 views
1

친구의 게시물을 표시하는 가장 좋은 방법은 무엇입니까?PHP mysql 친구의 게시물보기

각 사용자는 최대 5,000 명의 친구를 가질 수 있습니다.

단계 :

1) mysql은 5000 명의 사용자 이름을 검색합니다.

2) 5000 친구의 사용자 이름을 PHP 배열에 저장합니다.

3) SELECT posts, datatime FROM tbl_posts WHERE username IN ($array) ORDER BY id DESC LIMIT 10;

질문 : 이제 zac1987는 PHP 배열에 5,000 번째 항목으로 가정 해 봅시다. 최신 게시물 10 개가 zac1987에 의해 게시 된 경우, mysql은 게시물이 게시되었는지 여부를 결정하기 위해 5000 개 항목을 반복하는 데 시간을 낭비해야합니까? 따라서 10 개의 최신 게시물을 표시하려면 mysql이 5000 명의 친구 x 10 개의 게시물 = 50,000 개 항목을 반복해야합니까? 5 초마다 새로운 글이 있는지 확인해야하므로 5 초마다 5 만 개 항목을 반복해야합니다. 너무 많은 루핑/필터링 항목 처리를 방지하는 방법이 있습니까?

답변

3
SELECT p.* 
FROM friend f 
JOIN post p 
ON  p.author = f.friend_id 
WHERE f.user_id = $myuserid 
ORDER BY 
     p.post_date DESC 
LIMIT 10 

당신은

friend (friend_id, user_id)는 중요도에 따라, post (post_date), post (author)에 인덱스를 생성해야합니다, MySQL 조인 (이 경우 첫 번째 인덱스가 사용됩니다)에서 최고의 post를하거나 선도 friend을 다할 것 중 하나 (이 경우 모든 친구의 소식을 모아서 분류합니다).

+0

와우, 조인 방법을 사용하여 5000 명의 친구를 배열로 건너 뛸 수 있다는 것을 알지 못한다. 정말 고마워. 만약 내가'post'를 참여 시키려고한다면? 10 개의 최신 게시물을 표시하고 싶습니다. 10 개의 최신 친구가 올린 게시물을 표시하고 싶지 않습니다. – zac1987

+0

@ zac1987 :'STRAIGHT_JOIN'을 사용할 수도 있지만 MySQL이 결정하게하십시오. 'p.post_date '명령으로 어쨌든'10' 최근 포스트가 표시됩니다. 어떤 테이블이 선행하거나 구동되는지는 쿼리의 의미에 영향을주지 않습니다. – Quassnoi

+0

고맙습니다. – zac1987