2012-11-21 92 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

嗯,只是试了一下:) – Saff

+1

你可以将查询拆分成两个查询,并将结果存储在同一个数组中。 – Jeemusu

回答

2

- >其中()支持传递任何字符串,它就会在查询中使用它,provid? ed分别传递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

请注意,这将涉及'posts'的全面扫描,因为在'MySQL'中'IN'构造始终使外面的桌子领先。 – 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

相关问题