Ruby on rails ruby中的复数计数

Ruby on rails ruby中的复数计数,ruby-on-rails,ruby,count,Ruby On Rails,Ruby,Count,我想确定并统计有特定数量的邮件和非零的post.location的帖子 我有大约10万行,这是用于统计的,所以我需要快速查询,顺便说一句,我可能需要索引post.location 我怎样才能用最简单、最快捷的方法来做呢 这是我的模式: create_table "posts", :force => true do |t| t.string "ref" t.string "title" t.string "author" t.datetime "created_a

我想确定并统计有特定数量的邮件和非零的post.location的帖子

我有大约10万行,这是用于统计的,所以我需要快速查询,顺便说一句,我可能需要索引post.location

我怎样才能用最简单、最快捷的方法来做呢

这是我的模式:

create_table "posts", :force => true do |t|
  t.string   "ref"
  t.string   "title"
  t.string   "author"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.string   "location"
  t.float    "lat"
  t.float    "long"
end

create_table "messages", :force => true do |t|
  t.integer  "post_id"
  t.integer  "status_id"
  t.integer  "user_id"
  t.string   "content"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.float    "lat"
  t.float    "long"
end

add_index "messages", ["post_id"], :name => "index_messages_on_post_id"
add_index "messages", ["created_at"], :name => "index_messages_on_created_at"

您正在查找的SQL查询应该类似于以下内容:

SELECT COUNT(posts.id)
FROM posts
JOIN messages ON (posts.id = messages.post_id)
GROUP BY (posts.id) HAVING (count(messages.id) > ?)
WHERE posts.location IS NOT NULL
然后,您可以将其转换为ActiveRecord查询,或者只使用find_by_sql。
我是凭记忆写的,所以你可能需要在某些地方进行调整。。但是总体思路应该是可行的。

您正在查找的SQL查询应该非常像这样:

SELECT COUNT(posts.id)
FROM posts
JOIN messages ON (posts.id = messages.post_id)
GROUP BY (posts.id) HAVING (count(messages.id) > ?)
WHERE posts.location IS NOT NULL
然后,您可以将其转换为ActiveRecord查询,或者只使用find_by_sql。
我是凭记忆写的,所以你可能需要在某些地方进行调整。。但是总体思路应该是可行的。

您可以在发布模型中使用此范围

作用域:指定一个有效的名称,lambda{n}joins:messages.havingCOUNTmessages.id={n}。其中location不为NULL}

然后使用Post.give_a_valid_name5.size获取包含5条消息的帖子数


希望这有帮助。

您可以在发布模型中使用此范围

作用域:指定一个有效的名称,lambda{n}joins:messages.havingCOUNTmessages.id={n}。其中location不为NULL}

然后使用Post.give_a_valid_name5.size获取包含5条消息的帖子数


希望这能有所帮助。

好吧,多亏了提格莱恩和阿兹7AR的回答,我才得以度过难关。以下是结果:

Post.joins:messages.select'Post\u id as id'。grouppost\u id.havingcount*=1。其中'location NOT NULL'


感谢Tigraine的加入建议和az7ar的。wherelocation不是NULLsyntax。

好的,多亏了Tigraine和az7ar的回答,我成功地通过了。以下是结果:

Post.joins:messages.select'Post\u id as id'。grouppost\u id.havingcount*=1。其中'location NOT NULL'


感谢Tigraine的加入建议和az7ar的.wherelocation不是null语法。

看起来不错,我如何验证post.location不是nil?看起来不错,我如何验证post.location不是nil?