Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 给定一个私人消息表,如何查找我最近的n个联系人?_Sql_Ruby On Rails - Fatal编程技术网

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)stu
1) 阿里尔
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进行分组时,我会得到重复的结果(例如,
[#、#]