Fuelphp получает комментарии к сообщениям на той же логике страницы

Во-первых, я действительно новичок в Fuelphp, вы можете проголосовать за вопрос, если это необходимо. Моя проблема в том, что я сделал стену, похожую на фейсбук, и я не очень понимаю логику комментариев.

Поэтому я попытался присоединиться к своим столам таким образом

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;
        }

    }

проблема в том, что это показывает только сообщения потока, у которых есть комментарии, и не показывает другие.

Итак, может ли кто-нибудь дать мне логику, как присоединиться к таблицам, чтобы показать эти сообщения тем, у которых нет комментариев?


person Side    schedule 29.08.2012    source источник


Ответы (1)


Попробуй это:

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_id из stream_post имеет один и тот же user_id в users_metadata. Просто передайте этот запрос в fuelphp (раньше я его не использовал).

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
person Chris    schedule 29.08.2012
comment
извините, я плохо отредактировал вопрос и попробовал ваш код, ничего не показывает - person Side; 29.08.2012
comment
посмотрите мое редактирование (вы также можете попробовать запустить этот запрос в PHPmyAdmin, чтобы увидеть, что вы получите). - person Chris; 29.08.2012
comment
проблема с этим, когда я меняю запрос на левый джоуин, он возвращает идентификатор сообщения потока null - person Side; 29.08.2012
comment
вроде ничего не работает, но спасибо за помощь попробую разобраться - person Side; 29.08.2012
comment
большое спасибо за вашу помощь, ваш код был правильным в первый раз с левым соединением, это было плохо, сообщение потока и комментарий потока имели одно и то же имя поля, идентификатор сообщения потока, а идентификатор потока комментария потока заменял идентификатор сообщения потока. , извините за это, и спасибо за вашу помощь - person Side; 29.08.2012