前提
知識不足で言葉で説明するのが難しいので、具体例で説明します。
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 コメント