2012-11-21 2 views
1

나는이 테이블을 가지고 있습니다.AR 자신의 게시물 및 친구 게시물을 얻으십시오

user - contains user_id | username | fullname | email etcc 
user_followers - contains follow_id| user_id | follower_id | date etcc 
posts - contains post_id | user_id | post | post_date 

사용자가 소식을받는 사용자와 사용자의 게시물을 모두 포착하려고합니다.

내가

$this->db->select('posts.*')->from('posts') 
     ->join('user_followers', 'user_followers.user_id = posts.user_id', 'INNER') 
     ->where('user_followers.follower_id', $user_id)->order_by('posts.post_date','desc'); 
    $query = $this->db->get(); 

을 시도했습니다 그러나 문제는,이 쿼리에서 사용자의 게시물을 얻을 수 아니에요. 나는 or_where 등 다른 방법을 시도하고 난 사용자의 게시물을 얻을 데이터 만 배 것을 :( 누군가가 여기 좀 도와 주실 래요? 많은 감사를 사전에 할 수 있었다.

아 정상 MySQL의에 그;

SELECT posts.* 
FROM posts 
JOIN user_followers 
ON  user_followers.user_id = posts.user_id 
WHERE user_followers.follower_id = $user_id 
ORDER BY 
    posts.post_date DESC 
+0

'정상'MySQL의 쿼리 작업을 수행을 확인할 수 있습니다? – Dalen

+0

Yh, 방금 해봤습니다 :) – Saff

+1

두 쿼리로 쿼리를 분할하고 결과를 동일한 배열에 저장할 수 있습니다. – Jeemusu

답변

2

->()를 지원 그것은 어떤 문자열을 전달하고 쿼리에서 사용되며, 제공하기? 당신은 각각 NULL과 FALSE의 두 번째와 세 번째 매개 변수를 전달했다. 이렇게하면 CI가 쿼리를 이스케이프하지 않도록 지시합니다. 예.

$where_query = "p.user_id = $user_id OR p.user_id IN (SELECT user_id FROM user_followers WHERE follower_id = $user_id)"; 
->where($where_query,NULL,FALSE); 

또는이 하위 쿼리 라이브러리 https://github.com/EllisLab/CodeIgniter/wiki/Subqueries

+0

이것은'MySQL'에서'IN' 구조로 항상'posts'에 fullscan을 포함 할 것입니다. 외부 테이블을 선두로 만듭니다. – Quassnoi

0

왜 하위 선택

select * from posts 
where user_id IN (
    select user_followers.follower_id 
     from user_followers 
     where user_followers.user_id=$user_id) 
    OR posts.user_id = $user_id; 
+0

아직도 복제 중이다. ( – Saff

1
SELECT p.* 
FROM (
     SELECT user_id 
     FROM user_followers 
     WHERE follower_id = $user_id 
     UNION ALL 
     SELECT $user_id 
     ) uf 
JOIN posts p 
ON  p.user_id = uf.user_id 
+0

나를 도와 준 점에 대해 Quassnoi에게 감사한다. :) – Saff

관련 문제