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

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

我想问一下像下列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 ) 
共收到 11 条回复

字符串形式的 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 了

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