1

まず、私はfuelphpを初めて使用します。必要に応じて質問に反対票を投じることができます。私の問題は、Facebook に似た壁を作ったことです。コメントのロジックがよくわかりません。

だから私はこの方法でテーブルに参加しようとしました

static function get_stream()
    {
        $query = DB::select()->from('stream_post');
        $query->join('users_metadata');
        $query->on('stream_post.user_id', '=', 'users_metadata.user_id');
        $query->join('stream_comment');
        $query->on('stream_post.stream_id', '=', 'stream_comment.stream_id');
        $query->order_by('stream_post.stream_id', 'DESC');
        $result = $query->execute();
        if(count($result) > 0) {    
            foreach($result as $row)
            {
                $data[] = $row;
            }

            return $data;
        }

    }

これの問題は、コメントのあるストリーム投稿のみが表示され、他の投稿は表示されないことです。

それで、テーブルを結合してコメントのないものにそれらの投稿を表示する方法のロジックを教えてください。

4

1 に答える 1

2

それを試してください:

static function get_stream()
    {
        $query = DB::select()->from('stream_post');
        $query->join('users_metadata');
        $query->on('stream_post.user_id', '=', 'users_metadata.user_id');
        $query->join('stream_comment', 'RIGHT'); // The RIGHT JOIN keyword returns all rows from the right table, even if there are no matches in the left table.
        $query->on('stream_post.user_id', '=', 'stream_comment.user_id');
        $query->order_by('stream_post.stream_id', 'DESC');
        $result = $query->execute();
        if(count($result) > 0) {    
            foreach($result as $row)
            {
                $data[] = $row;
            }

            return $data;
        }
}

編集: そのクエリは機能するはずです(すべてのuser_idfromがin でstream_post同じ場合。このクエリをfuelphpに転送するだけです(以前は使用していませんでした)。user_idusers_metadata

SELECT *
FROM stream_post
RIGHT JOIN stream_comment
ON stream_post.stream_id = stream_comment.stream_id
JOIN users_metadata
ON stream_post.user_id = users_metadata.user_id
ORDER BY stream_post.stream_id DESC
于 2012-08-29T08:50:57.797 に答える