https://teratail.com/questions/153904
で別のテーブルを複数の値で検索する方法を質問したのですが
1度に多くの内容を質問しすぎていただいた回答のSQL文が理解できないので
別テーブルを1つのデータで検索する方法を理解したいです
users テーブル(今はIDしか使わない)と
以下のようなマイグレーションで作成された user_status テーブル (ユーザ x ステータスID のペア)で
どのユーザがどのステータスをもっているかを保持するテーブルがあります
class CreateUserStatuses < ActiveRecord::Migration def change create_table :user_statuses do |t| t.references :user, foreign_key: true, null: false t.integer :status_id, null: false t.timestamps null: false end end end
たとえば
users table に
1
2
3
と3人のユーザがはいっていて
user_status table に
1 1
1 2
2 2
2 3
3 3
3 4
(ユーザ1 がステータス[1, 2], ユーザ2 がステータス[2, 3], ユーザ3 がステータス[3, 4] をもっている)
とします
このときステータス 2 をもっているユーザを検索したい(結果は users table のレコード [<user1>, <user2>] を得たい)場合
Rails のコードで Users.where(...) の中に何とかけばいいんでしょうか
最終的には上記関連質問にあるとおり複数のステータスをすべてもったユーザを検索したいのですが
group by とか count を使う必要があるみたいなんですが1度に複数要素が入ると理解できなかったので
とりあえず1つのキーに対して別テーブルを参照する方法を理解したいです
よろしくおねがいします
追記:
@users = Users.where("id IN (SELECT user_id FROM user_statuses WHERE status_id = #{status_id})")
たとえばこんな感じで user_status の全レコード中で status_id をもってる user_id を全部取得して
その中に含まれてるユーザだけ取り出すというのはかけそうなのですが
status_id は index 化されてないためレコードすべてをなめてパフォーマンス的に問題がありそうな気がします
できれば user_status の中は index されてる user_id のほうで検索をかけたいです
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/24 05:04 編集
2018/10/24 06:00 編集
退会済みユーザー
2018/10/24 06:20 編集
2018/10/24 06:31
退会済みユーザー
2018/10/24 06:41
2018/10/24 06:43 編集
退会済みユーザー
2018/10/24 06:45