1

私はこれらのテーブルを持っています。

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などで他の方法を試しましたが、データが3倍になっただけで、ユーザーの投稿を取得できました:(誰かがここで私を助けてくれませんか?よろしくお願いします。

ああ、通常の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
4

3 に答える 3

2

-> where()は、任意の文字列の受け渡しをサポートしており、NULLとFALSEの2番目と3番目のパラメーターをそれぞれ渡すと、クエリで使用されます。これは、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

于 2012-11-22T11:10:42.870 に答える
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
于 2012-11-22T05:53:53.850 に答える
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;
于 2012-11-21T22:09:41.693 に答える