Sql 给定一个私人消息表,如何查找我最近的n个联系人?
我有一个私人消息表,如下所示:Sql 给定一个私人消息表,如何查找我最近的n个联系人?,sql,ruby-on-rails,Sql,Ruby On Rails,我有一个私人消息表,如下所示: create_table "messages" do |t| t.text "body" t.integer "sender_id" # corresponds to a user_id t.integer "recipient_id" # corresponds to a user_id end 我需要一种方法来查找给定用户的n个最近联系人。例如,如果我按顺序收到这些消息: 0)stu 1) 阿里尔 2) 阿里尔 3) 阿里尔 4
create_table "messages" do |t|
t.text "body"
t.integer "sender_id" # corresponds to a user_id
t.integer "recipient_id" # corresponds to a user_id
end
我需要一种方法来查找给定用户的n个最近联系人。例如,如果我按顺序收到这些消息:
0)stu1) 阿里尔
2) 阿里尔
3) 阿里尔
4) 丹
5) 丹
6) 托德
7) 宜兰 我最近的三个联系人是伊兰、托德和丹。我最近的4个联系人是ilan、todd、dan和ariel等。我无法将其“翻译”为Ruby on Rails,但下面是SQL:
SELECT sender_id
FROM messages
WHERE recipient_id = @current_user_id
GROUP BY sender_id
ORDER BY MAX(created_at) DESC
我猜您在处创建了一个字段,用于存储收到的消息的顺序。尝试以下操作:
假设您有以下型号:
class User
has_many :received_messages, :class_name=> "Message",
:foreign_key => :recipient_id
has_many :sent_messages, :class_name=> "Message",
:foreign_key => :sender_id
def recently_active_contacts(kount=5)
received_messages.
select(:recipient_id).
include(:recipient).
group(:recipient_id).
order("MAX(messages.created_at) DESC").
limit(kount).
map(&:recipient)
end
end
class Message
belongs_to :sender, :class_name=> "User", :foreign_key => :sender_id
belongs_to :recipient, :class_name=> "User", :foreign_key => :recipient_id
end
您可以执行以下操作:
user.recently_active_contacts
user.recently_active_contacts(3)
问题:如果我想要同样的东西,但是对于那些已经向我发送或接收电子邮件的用户,该怎么办。当我尝试按收件人id、发件人id进行分组时,我会得到重复的结果(例如,[#,#]
)问题:如果我想要相同的东西,但对于向我发送或接收电子邮件的用户,该怎么办。当我尝试按收件人id、发件人id进行分组时,我会得到重复的结果(例如,[#、#]
)