mysql - 根据 :user_id and then merge into 1 对 2 个 ActiveRecord 数组进行排序

标签 mysql ruby-on-rails activerecord merge

我正在尝试在我的 Rails 应用程序中构建用户之间的“交友”功能。 当用户发出好友请求时,将创建一个新的“好友”项目:

@friend = Friend.create(:user_id => session[:user_id], :friend_id => params[:friend_id], :status => "pending")

然后其他用户 (:friend_id) 可以接受或拒绝该请求。接受时,状态更改为“已接受”,一切正常。

我现在正在尝试返回 friend 列表,但我遇到的问题是 Friend 项目可以将 friend ID 保存在 :user_id 或 :friend_id 中,具体取决于发起请求的人。

我正在返回所有在 :user_id 或 :friend_id 中具有登录用户 ID 的 friend 项目,但我无法将它们分类到 1 个用户列表中,这些用户不是当前登录的用户(即 friend 用户)登录用户的)一旦我有了那些 friend 项目。这就是我目前所做的,希望它能让您了解我正在尝试做的事情。

@stalked = Friend.where(:user_id => session[:user_id], :status => "accepted")
# @stalked_friends = Users where id == :friend_id in @stalked list
@stalkers = Friend.where(:friend_id => session[:user_id], :status => "accepted")
# @stalker_friends = Users where id == :user_id in @stalkers list
@friends = @stalked_friends + @stalker_friends

我希望这是有道理的,在此先感谢

最佳答案

我已经在一小部分数据上试过了,它运行良好,应该可以运行!

cuid = session[:user_id]
query = %Q{SELECT DISTINCT users.*
FROM users,friends 
WHERE (friends.user_id = #{cuid} OR friends.friend_id = #{cuid}) 
AND (friends.user_id = users.id OR friends.friend_id = users.id)
AND (friends.status = 'accepted')
AND (users.id != #{cuid})
}

@friends = User.find_by_sql(query)

关于mysql - 根据 :user_id and then merge into 1 对 2 个 ActiveRecord 数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20076554/

相关文章:

php - 使用一个表来保存另一个更大表的 COUNT/SUM 是不是糟糕的设计?

ruby-on-rails - 登录 delayed_job?

ruby-on-rails - 在rails中创建一个表并添加外键约束

mysql - SQL:DATE_FORMAT() 和顺序

php - 如何在 MySQL 中设置相反的条件?

ruby-on-rails - 不同环境下的引 rails 3.1

MySQL 到 Postgres 按错误分组

ruby-on-rails - 如何使用/加入rails 3修改复杂的sql查询

ruby-on-rails - Rails 保存序列化对象失败?

mysql: ERROR 1217 (23000): 无法删除或更新父行:外键约束失败