gpt4 book ai didi

mysql - Rails find_by_sql 问题

转载 作者:行者123 更新时间:2023-11-29 00:56:53 26 4
gpt4 key购买 nike

我的 RoR 脚本中有以下调用:

Foo.where("event = 'Login'").group('user_id').order('user_id ASC').count()

这为我提供了所有用户的列表以及他们以以下形式登录的数量:

<userid1> => <count>, <userid2> => <count>, ...}

这很好,非常接近我想要的,但我一直无法说服它按登录次数排序,而不是我真正想让它做的事情。还有一列以字符分隔字符串的形式包含有关登录 session 的一些信息。我想了解该信息的某些部分。

为了实现这一点,我尝试使用 find_by_sql 并在进行以下调用时:

Foo.find_by_sql("SELECT userid, COUNT(*) AS number, SUBSTRING_INDEX(stuff, ',', 1) AS info FROM <table> WHERE event = 'Login' GROUP BY userid")

我得到的是一个包含用户标识但不包含计数或信息的 Foo 条目列表。当我在 MySQL Workbench 中运行它时,它就像一个魅力。我还需要做些什么才能让它发挥作用吗?另外,有没有一种方法可以使用 Foo.select 或 Foo.where 来做到这一点?谢谢。

更新 我也试过这种格式,如图here :

Foo.find(:all, :select => 'count(*) count, userid', :group =>'userid')

但这也只是用用户 ID 进行响应,并没有吐出计数。

更新 2 更多地查看输出,我现在可以看到,当我执行 find_by_fql 调用时,一切都以正确的方式找到,甚至被排序。它实际上并没有选择 COUNT(*) 或 SUBSTRING_INDEX。

更新 3 我也试过了 this所以提示,但当我告诉它时:

Foo.find(:all, :select => 'userid, count(*) as cnt', :group => 'userid')

它不打印或查找与 var cnt 相关的任何内容。我在这里完全感到困惑,因为我现在已经看到不止一个这样做 ^^ 方式的例子,但我还没有让它成功。

最佳答案

其实你的问题不是SQL的问题。要生成正确的 SQL,您只需要这样:

Foo.where("event = 'Login'").group('user_id').order('count_all').count()

查看您的日志,您会发现这会生成以下 SQL:

SELECT COUNT(*) AS count_all, user_id AS school_id FROM `foos` GROUP BY user_id ORDER BY count_all

...如果您在 SQL 控制台中运行它,您将获得所需的结果。

问题 是 Rails 不按此顺序返回它们,Rails 总是 按顺序返回这些特殊的 group/count 结果GROUP BY 字段。因此,如果您希望它们以不同的顺序排列,那么您需要在取回哈希后在 Ruby 中执行此操作。

关于mysql - Rails find_by_sql 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5709617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com