子テーブルで絞り込み、親テーブルでまとめたい

前提

知識不足で言葉で説明するのが難しいので、具体例で説明します。

Book table

key comment
id 本ID
title タイトル

Comments table

key comment
id コメントID
book_id 本ID
title タイトル
content 内容
user_id ユーザーID
membership_flag 会員限定フラグ

実現したいこと

上記のようなテーブルが存在しているとして、会員限定のみのコメントを取得したいのですが…
ただ単にjoinして1枚のテーブルにして表示したいのではなく、frontでBookテーブルから掘って行って会員限定のみの結果を出力したいです。
例)BookAの会員限定コメント一覧, BookBの会員限定コメント一覧みたいなことを1ページに出力させたい

shell

Book.includes(:comments).where(id: [1, 5, 10, 11], comment: {menbership_flag: true})> SELECT `book`.* FROM `book` LEFT OUTER JOIN `comments` ON `comments`.`book_id` = `book`.`id` WHERE `book`.`id` IN (1, 4, 5) AND `comments`.`membership_flag` = TRUE

これでは1枚のテーブルで出力されてしまい、行いたいことが出来ません。

試したこと

雀の涙ほどしかない知恵を絞って、distinctを使って対策を考えたのですが…
件数は確かに、欲しい理想的な数字で間違ってないのですが、distinctした結果、comments.membership_flag = TRUEの部分が潰れてしまい、実際にfrontで表示させると会員限定以外のコメントも表示されてしまい意味がありませんでした。

何かいい方法をご教示いただけると幸いです。

コメントを投稿

0 コメント