select user_id from topics group by user_id order by count(user_id) desc 上面语句的 rails 该怎么写?
Topics.where(:user_id => user_id).group("topics(user_id)").order("user_id DESC")
不知道是不是我上面的写法,不过我估计是错的。^_^ 可以参考这里:http://guides.rubyonrails.org/active_record_querying.html
Topic.select(:user_id).group(:user_id).order("count(user_id) DESC")
电脑没装 MySQL 没验证过。
试试这个
Topic.group(:user_id).order('count_all').count
返回的是是一个 user_id - count_all 的 Hash,需要在 ruby 里根据 value 排序。
我试了试
Topic.group(:user_id).order('count_all desc').count
也能出来,打印出来似乎是按照 count_all
排序的(不解,Hash 不是无序的吗?)。我用的是 Ruby-1.9.3 和 Rails-3.2.8
如果你的表名和字段名符合约定或者都设置好关联和表名的话可以这样
Person.joins(:orders).select(:LastName, :FirstName, :OrderNo).order("LastName")
你的意思是查询发表了 topic 的 user 列表,你想要的 user 列表,但是里面的 user 需要有 topic,然后根据 topic 的 count 倒序排列,是这样的吗?
先写出 sql,然后再翻译成 rails 的 query interface。 强烈建议学习 sql 先,稍微复杂点的数据库应用都会用到的,这个也是基本功之一,必须比较扎实才行。
先说 sql 怎么写。 你这个最直观的是需要连接两张表,users 和 topics,inner join。 users inner join topics on users.id=topics.user_id 这样保证只查询发表过 topic 的 user。 然后根据 topic 的 user_id 分组,配需,然后查询 user 的信息。
或者是
select u from users u where exists( select 1 from topics t where t.user_id=u.id) .groupby .order
#19 楼 @woaigithub sql 理好了 SELECT * FROM users INNER JOIN(select user_id from topics group by user_id order by count(user_id) desc) g on g.user_id = id。find_by_sql 可以实现,那转换乘 rails 还是不会,用 joins 一直没成功过