0

Railsのアクティブレコードまたはsql(sqlite)のいずれかを使用して次のクエリを実行する必要があります。

モデルの説明から始めましょう。

  • ユーザー1:nインタレスト
  • 関心m:nカテゴリ
  • 関心m:n場所
  • イベントm:nカテゴリ
  • イベントm:n場所

m:nの関係は、interests_categories、events_categoriesなどのパターンを持つ3番目のテーブルを通じて可能になります。

私にはユーザーがいて、それらのユーザーは興味を持っています(カテゴリ->たとえば、スポーツ、音楽、彼が好きな場所)。イベントは場所とカテゴリでタグ付けされます。

ここで、特定のイベントに適合する可能性のあるすべてのユーザーを一覧表示したいと思います。たとえば、ニューヨークで行われ、スポーツでやるべきことがあるイベントがある場合、場所とカテゴリに基づいて、このイベントに興味を持っている可能性のあるユーザーのリストを取得したいと思います。

複数ではなく、単一のデータベースアクセスで実行したいと思います。ActiveRecordまたはSQLではどのように見えますか?(より効率的な方法が好まれます)おそらく、最初にカテゴリ/場所テーブルを結合し、以前に結合したすべてのテーブルに基づいてインタレストを結合してから、インタレストに基づいてすべてのユーザーを選択する必要があります。残念ながら、joinssqlの知識は限られています。または、別のアプローチも利用できますか?

4

1 に答える 1

1

少し考えた後、この結合はうまくいくと思います。

class Events
  def get_users

User.joins(%"inner join interests on interests.user_id = users.id
             inner join categories_interests
               on categories_interests.interest_id = interests.id
             inner join categories on categories_interests.category_id = categories.id
             inner join interests_locations
               on interests_locations.interest_id = interests.id
             inner join locations on interests_locations.location_id = locations.id
             inner join categories_events on categories_events.category_id = categories.id
             inner join events_locations on events_locations.location_id = locations.id
             inner join events
               on categories_events.event_id = events.id
               and events_locations.event_id = events.id").where("events.id = :eid", :eid => id)

  end
end
于 2012-09-25T10:07:43.843 に答える