Ruby on rails ruby中的复数计数
我想确定并统计有特定数量的邮件和非零的post.location的帖子 我有大约10万行,这是用于统计的,所以我需要快速查询,顺便说一句,我可能需要索引post.location 我怎样才能用最简单、最快捷的方法来做呢 这是我的模式: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
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?