根据对调查中特定答案的最新响应对用户进行排序?
Sort users based on most recent response to a particular answer in a survey?
我正在使用 Rails 5,PostgeSQL 9.4.5
尝试根据用户对调查中某个问题的最新回答对用户进行排序
到目前为止我有:
User.includes(responses: [answer: :question]).where(questions: {id: X}).order(...)
不确定要点什么。所有的回答都有数字 'scores' 代表它是哪个答案。我在想象最后的东西:
.order("answers.score ASC")
但我正在努力让这两个连接起来。我只想根据用户对该特定问题的最新回答对用户进行排序。 (他们可以多次参加调查)
我假设我需要在某些 SELECT
中设置一个字符串函数,但我正在努力思考它。
感谢任何帮助!
您可以像这样打印 rails 查询的实际 SQL:
User.includes(responses: [answer: :question]).where(questions: {id: X}).to_sql
然后可以order
右边table.field(在SQL返回的SQL中找到table名字=13=]) 和 db/schema.rb
中的字段
应该是created_at
。 User...order('responses.created_at DESC')
更新
但是这将根据他们对问题的最后回答对所有 responses
而不是 users
进行排序,正如您在下面评论的那样。
在这种情况下,您必须:
根据用户的回答对用户进行分组
计算每个用户的最后响应(MAX(user_responses.created_at))
按最后回复对用户进行排序
像这样:
User
.includes(responses: [answer: :question])
.where(questions: {id: X})
.group('users.id')
.order('MAX(responses.created_at) DESC')
我正在使用 Rails 5,PostgeSQL 9.4.5
尝试根据用户对调查中某个问题的最新回答对用户进行排序到目前为止我有:
User.includes(responses: [answer: :question]).where(questions: {id: X}).order(...)
不确定要点什么。所有的回答都有数字 'scores' 代表它是哪个答案。我在想象最后的东西:
.order("answers.score ASC")
但我正在努力让这两个连接起来。我只想根据用户对该特定问题的最新回答对用户进行排序。 (他们可以多次参加调查)
我假设我需要在某些 SELECT
中设置一个字符串函数,但我正在努力思考它。
感谢任何帮助!
您可以像这样打印 rails 查询的实际 SQL:
User.includes(responses: [answer: :question]).where(questions: {id: X}).to_sql
然后可以order
右边table.field(在SQL返回的SQL中找到table名字=13=]) 和 db/schema.rb
应该是created_at
。 User...order('responses.created_at DESC')
更新
但是这将根据他们对问题的最后回答对所有 responses
而不是 users
进行排序,正如您在下面评论的那样。
在这种情况下,您必须:
根据用户的回答对用户进行分组
计算每个用户的最后响应(MAX(user_responses.created_at))
按最后回复对用户进行排序
像这样:
User
.includes(responses: [answer: :question])
.where(questions: {id: X})
.group('users.id')
.order('MAX(responses.created_at) DESC')