【问题标题】:AR get own posts and friends postsAR 获取自己的帖子和朋友的帖子
【发布时间】:2012-11-10 06:13:50
【问题描述】:

我有这些表;

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

【问题讨论】:

  • “正常”的 mysql 查询是否有效?
  • 您可以将查询拆分为两个查询,并将结果存储在同一个数组中。
  • 嗯,这也不错。谢谢

标签: mysql codeigniter activerecord codeigniter-2


【解决方案1】:

->where() 支持将任何字符串传递给它,并且它将在查询中使用它,前提是您分别传递了 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

【讨论】:

  • 请注意,这将涉及对posts 的全扫描,因为在MySQL 中,IN 构造始终使外部表领先。
【解决方案2】:
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

【讨论】:

    【解决方案3】:

    为什么不是子选择?

    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;
    

    【讨论】:

    • 它仍然是重复的 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多