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

ruby-on-rails – 在活动记录中使用arel的关系计数

发布时间:2020-12-17 04:38:24 所属栏目:百科 来源:网络整理
导读:我有一个非常艰难的时间来确定如何执行此查询以及其他类似于活动记录中的arel. select users.id,users.name,maps.count as map_count,from users left join (select user_id,count(map_id) as count from maps_users group by user_id) maps on users.id = m
我有一个非常艰难的时间来确定如何执行此查询以及其他类似于活动记录中的arel.
select users.id,users.name,maps.count as map_count,from users
  left join (select user_id,count(map_id) as count from maps_users group by user_id) maps on users.id = maps.user_id

从表面上看,它看起来就像Nik的例子(http://magicscalingsprinkles.wordpress.com/2010/01/28/why-i-wrote-arel/):

photo_counts = photos.
group(photos[:user_id]).
project(photos[:user_id],photos[:id].count)

users.join(photo_counts).on(users[:id].eq(photo_counts[:user_id]))

但是我不能让它在使用活动记录的rails中工作.我认为等效应该是这样的,但它出错了:(

maps = Map.arel_table
  map_counts = Map.group(maps[:owner_id]).
                   select(maps[:owner_id]).
                   select(maps[:id].count.as("map_count"))
  users = User.joins(map_counts).on(User.arel_table[:id].eq(map_counts[:map_count]))

关于如何做的任何想法?

解决方法

首先用项目替换select.在关系代数中,SELECT(限制)是WHERE子句.

其次,您可以进行子选择.

sub_restriction = b.
                   where( b[:domain].eq(1) ).
                   project( b[:domain] )

restriction = a.
               where( a[:domain].in sub_restriction )

完成“子选择”!

(编辑:李大同)

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

    推荐文章
      热点阅读