加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

sql – 通过named_scope返回对象数组 – has_many … belongs_

发布时间:2020-12-11 23:49:37 所属栏目:MySql教程 来源:网络整理
导读:我正在寻找一个答案,它将通过(最好)一个named_scope返回一个用户对象数组,或者通过User模型上的类方法返回一些操作. 所以没有进一步的 我有两个表:用户和战斗. 用户有很多打架(has_many:打架,:foreign_key =>challenger_id或challengee_id) 战斗属于用户(

我正在寻找一个答案,它将通过(最好)一个named_scope返回一个用户对象数组,或者通过User模型上的类方法返回一些操作.

所以没有进一步的…

我有两个表:用户和战斗.

>用户有很多打架(has_many:打架,:foreign_key =>’challenger_id或challengee_id’)
>战斗属于用户(belongs_to:challenger,:class_name =>’用户’… belongs_to:challengee,:class_name =>’用户’)

战斗有以下几个关注的栏目:

> challenger_id(user_id fk)
> challengee_id(user_id fk)
> challenger_won(布尔值)

如您所见,用户可以是挑战者或挑战者,但不是两者.

>如果用户是挑战者并且challenger_won = true,那么它被视为胜利.
>如果用户是挑战者且challenger_won = false,则认为是胜利.
>如果challenger_won = null,那么就忽略它.

我有一个原始的SQL语句,它返回按最多wins属性分组的战斗机属性(user_id):

SELECT a.fighter,COUNT(*) AS wins
  FROM (SELECT challenger_id AS fighter
          FROM fights
         WHERE challenger_won = TRUE
        UNION ALL
        SELECT challengee_id AS fighter
          FROM fights
         WHERE challenger_won = FALSE
       ) AS a
 GROUP BY a.fighter;

所以给定这个信息,如何通过(最好)一个named_scope返回一个用户对象数组,或者通过用户模型上的类方法进行一些操作? 最佳答案 我想你可以尝试这样的东西来重新创建你的查询结果:

class User
    named_scope :winners,:select => 'users.*,COUNT(fight.id) AS wins',:join => :fights,:conditions => ['(fights.challenger_id = user_id AND fights.challenger_won = TRUE) OR (fights.challengee_id = user_id AND NOT fights.challenger_won = FALSE)']
        :group => 'user_id'
end

但是,对于缓存目的,您可能需要考虑将win_count字段添加到User模型.如果为战斗的胜利者创建一个setter方法,则可以在更改时立即增加win_count.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读