我想问一下像下列 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)
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 不是等效的。
#6 楼 @jonny 可以用!
#7 楼 @Rei OK 好吧 我还是就用 sql 吧
谢谢各位了,就 find_by_sql 了