Я работаю над приложением для социальных сетей и пытаюсь создать
сложный запрос, который эффективно вытягивает всех друзей пользователя
Чекины из базы данных. В основном мне нужно: "user.friends.checkins"
Я воссоздал (в упрощенном виде) структуру данных ниже для
ссылки и включены несколько решений, которые я нашел, однако я чувствую,
как мои решения неоптимальные. Я надеюсь, что кто-то может указать
лучший путь ... Итак, вот так:
Сначала я попробовал, это работает, но это слишком медленно, учитывая, что пользователи
обычно у каждого +1000 друзей:
=> Checkin.where(:user_id => self.friends)
Тогда я попробовал это, которое также работает и намного быстрее, но чувствует
неаккуратно:
=> Checkin.joins(:user).joins('INNER JOIN "friendships" ON
"users"."id" = "friendships"."friend_id"').where(:friendships =>
{:user_id => 1})
Буду признателен за любую помощь, которую вы можете оказать! Спасибо в
заранее !!!
=== Структура данных ===
Users table has columns: id, name
Friendships table has columns: user_id, friend_id
Checkins table has columns: id, location, user_id
=== Модели ===
class User
has_many :friendships
has_many :friends, :through => :friendships
has_many :checkins
end
class Friendship
belongs_to :user
belongs_to :friend, :class_name => 'User'
end
class Checkin
belongs_to :user
end