@mondeoclub

Как подправить sql запрос?

Здравствуйте, помогите подправить запрос. В таком запросе выводятся посты только у которых есть комментарии, а нужно что бы выводились и те у которых нет комментов. Как это сделать одним запросом?
SELECT posts.id,
    posts.title,
    posts.thumbnail,
    posts.updated_at,
    posts.view,
    users.name,
    categories.category,
    COUNT(comments.comment) as countComment
FROM posts
INNER JOIN categories ON categories.id = posts.category_id
INNER JOIN users ON posts.user_id = users.id
INNER JOIN comments ON comments.post_id = posts.id
GROUP BY posts.id,
    posts.title,
    posts.thumbnail,
    posts.updated_at,
    posts.view,
    users.name,
    categories.category
ORDER BY posts.updated_at DESC


Желательно подскажите как это сделать с построителем запросов в ларавеле.
Тот же запрос.
$post = DB::table('posts')
            ->join('categories', 'categories.id', 'posts.category_id')
            ->join('users', 'users.id', 'posts.user_id')
            ->join('comments', 'comments.post_id', 'posts.id')
            ->select('posts.id', 'posts.title', 'posts.thumbnail', 'posts.updated_at',
                'posts.view', 'users.name', 'categories.category',
                DB::raw('COUNT(comments.comment) as countComment'))
            ->orderBy('posts.updated_at','desc')
            ->groupBy('posts.id', 'posts.title', 'posts.thumbnail', 'posts.updated_at',
                'posts.view', 'users.name', 'categories.category')
            ->get();
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
->leftJoin('comments', 'comments.post_id', 'posts.id')


А если comments.comment не может быть NULL, то ещё и

DB::raw('COUNT(comments.post_id) as countComment'))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
shabelski89
@shabelski89
engineer
нужен полный join
->join('comments', 'comments.post_id', 'posts.id')
на
->join('comments', 'comments.post_id', '=', 'posts.id', 'full outer')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы