新手问题 关于 rails 中子查询的问题

w353284782 · 2012年08月24日 · 最后由 w353284782 回复于 2012年08月24日 · 4302 次阅读

我想问一下像下列 sql 语句在 rails 中除了 find_by_sql 方法外 能用什么其他的方法组合

select * from Programs as a where name='0' and created_at = (select max(b.created_at) from Programs as b where user_id = a.user_id ) 

字符串形式的 where

#1 楼 @Rei 草莓你要不要每天的改头像啊

#1 楼 @Rei 这样? Program.where("name=? and created_at = (select max(created_at) from Programs where user_id = user_id )","0") 查出来数据就不对了呀,主要是这个表的别名没加上了,或者 怎么加表的别名呢?

换一种思路:Program.where(name: '0').order('created_at DESC').limit(1)

#4 楼 @feipinghuang 不是只返回一行,是返回 Program 这个表中 时间近一次 并且 name = “0”的所有数据 Program 的 name 有可能等于 1 有可能等于 0 也可能多次可能 1 次 而且时间有可能大有可能小;我帖子上的那个子查询就能查出来 我就想把他换成 rails 中的方法组合的形式

@w353284782 这个可以用 group by , having 么

#3 楼 @w353284782 用到别名还是用 find_by_sql 了,因为某些情况下(比如 includes)AcitveRecord 会添加自己的别名,容易冲突。

#4 楼 @feipinghuang 这个跟楼主的 SQL 不是等效的。

#7 楼 @Rei OK 好吧 我还是就用 sql 吧

谢谢各位了,就 find_by_sql 了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号