tl;dr
如何在SQL下面转换为Arel(或Rails中任何被认为是标准的)
@toplist = ActiveRecord::Base.connection.execute(
'select ci.crash_info_id,
count(distinct(user_guid))[Occurences],
c.md5
from crashes ci
join crash_infos c on c.id=crash_info_id
group by ci.crash_info_id
order by [Occurences] desc')-结束,博士
我正在做一个小的网络项目,它的目标是把我们的客户崩溃报告(当我们的桌面应用程序崩溃,我们发送诊断到我们的服务器),分析,然后显示什么是最常见的错误,导致我们的应用程序崩溃。这样我们就可以专注于修复那些影响到大部分用户的错误。
我有两张桌子:
现在,我想要做一个查询,显示唯一用户的大多数常见崩溃(避免对同一用户多次计算相同的崩溃次数),并按崩溃次数对其进行排序。不幸的是,我不知道足够多的Arel(或者其他什么是ruby on rails的方式),所以我得到了原始SQL :(
@toplist = ActiveRecord::Base.connection.execute(
'select ci.crash_info_id,
count(distinct(user_guid))[Occurences],
c.md5
from crashes ci
join crash_infos c on c.id=crash_info_id
group by ci.crash_info_id
order by [Occurences] desc')我怎样才能把这个转变成更“粗俗”的东西呢?
提前谢谢你
发布于 2012-12-08 17:08:38
不确定这是否真的更好,但至少您应该有一个独立于数据库的查询.
crashes = Arel::Table.new(:crashes)
crash_infos = Arel::Table.new(:crash_infos)
crashes.
project(crashes[:crash_info_id], crash_infos[:md5], Arel::Nodes::Count.new([crashes[:user_guid]], true, "occurences")).
join(crash_infos).on(crashes[:crash_info_id].eq(crash_infos[:id])).
group(crashes[:crash_info_id]).
order("occurences DESC").
to_sql给予:
SELECT "crashes"."crash_info_id", "crash_infos"."md5", COUNT(DISTINCT "crashes"."user_guid") AS occurences FROM "crashes" INNER JOIN "crash_infos" ON "crashes"."crash_info_id" = "crash_infos"."id" GROUP BY "crashes"."crash_info_id" ORDER BY occurences DESChttps://stackoverflow.com/questions/13777425
复制相似问题