Articles of sql

当某些东西存储为数组时,Rails where子句

我正在使用PG数据库运行rails 4.2。 我有一个存储在数据库中的项目,如(model Item ): :something => [“1”, “2”, “3”] 我想得到Item.where(:something.include? => “3”) 显然这不起作用 – 但是你打算如何在rails中做到这一点?

如何获得habtm协会的arel表?

我有两个具有HABTM关联的ActiveRecord模型。 我想编写一个scope来使用Arel获取孤立记录。 我的问题是我找不到一个方法来检索关联的arel_table 。 由于关系是HABTM,因此没有模型可以调用arel_table 。 我现在有以下(有效),但我创建了一个新的arel表,其中包含连接表的名称(使用reflect_on_association方法检索)。 scope :orphans, lambda { teachers = arel_table join_table = Arel::Table.new(reflect_on_association(:groups).options[:join_table]) join_table_condition = join_table.project(join_table[:teacher_id]) where(teachers[:id].not_in(join_table_condition)) } 这会产生以下SQL: SELECT `teachers`.* FROM `teachers` WHERE (`teachers`.`id` NOT IN (SELECT `groups_teachers`.`teacher_id` FROM `groups_teachers` )) 那么有没有更好的方法来检索arel_table而不是创建一个新的?

一次通话中多个日期范围的总和?

我有以下查询: SELECT SUM(“balance_transactions”.”fee”) AS sum_id FROM “balance_transactions” JOIN charges ON balance_transactions.source = charges.balance_id WHERE “balance_transactions”.”account_id” = 6 AND (balance_transactions.type = ‘charge’ AND charges.refunded = false AND charges.invoice IS NOT NULL) AND (“balance_transactions”.”created” BETWEEN ‘2013-12-20’ AND ‘2014-01-19’); 这样做会增加这两个日期之间发生的所有“费用”。 大。 工作良好。 问题是我几乎总是需要一次数百个日期范围的费用,这相当于我运行相同的查询数百次。 效率不高。 但有没有办法将其压缩为所有日期范围的单个查询? 例如,我将调用SUM作为一系列范围,如下所示: 2013-12-20 to 2014-01-19 2013-12-21 to 2014-01-20 2013-12-22 to 2014-01-21 2013-12-23 to 2014-01-22 […]

以has_many关系订购

我的Articles有很多Metrics 。 当Metric.name =“得分”时,我希望通过特定的Metric.value来订购Articles 。 ( Metric将各种文章统计信息记录为“名称”和“值”对。文章可以有多个度量标准,甚至多个“分数”,尽管我只对最近的排序感兴趣。) class Article has_many :metrics class Metric # name :string(255) # value :decimal(, ) belongs_to :article 我正在努力写一个范围来做这个 – 任何想法? 像这样的东西? scope :highest_score, joins(:metrics).order(‘metrics.value DESC’) .where(‘metrics.name = “score”‘) 更新: 一篇文章可以在metrics量表中存储许多“分数”(因为它们是按周/每月/每年等计算的),但我只对使用任何一篇文章的第一个(最近的)“分数”感兴趣。 Metric模型具有default_scope,可确保DESCending排序。 修复了’metrics.value DESC’报价位置的拼写错误。 与我的手机朋友uber rails hacker交谈,看起来我可能需要一个原始的SQL查询。 现在,我已经超越了我的脑袋……(如果有帮助,我正在使用Postgres。) 谢谢! 更新2: 感谢Erwin的SQL查询建议,我有一个原始的SQL查询,它有效: SELECT a.* FROM articles a LEFT JOIN ( SELECT DISTINCT […]

rails scope和join

我已经尝试了一切我认为可以为此工作的东西,而且我什么都没有。 在rails 3中,我需要在他们的汽车中找到所有有cd播放器的用户。 汽车有一个用户和一个收音机,用户属于汽车,收音机有很多汽车。 我对如何通过用户模型中的作用域执行此搜索感到磕磕绊绊。 class User belongs_to :car class Car belongs_to radio has_one :user, :dependent => destroy class Radio has_many :cars

rails paperclip没有通过sql查询从另一个模型直接访问

如果尝试从另一个模型访问回形针图像以通过SQL查询在其视图中显示,它将不会显示图像。 我从类别控制器尝试了类似这样的事情,从索引页面,通过选择框获取表格中的参数。 category controller def show @category = Category.find_by_sql [“select distinct l.* from listings l , categories c, categories_listings cl where c.id = cl.category_id and l.id = cl.listing_id and c.id in (?,?)” , params[:c][:id1] , params[:c][:id2]] end 在显示页面中,我无法从类别控制器访问列表模型中的回形针属性。 category show page 列表和类别具有habtm关系

在自定义条件下清理SQL

我需要创建一个简单的搜索,但我不能使用Sphinx。 这是我写的: keywords = input.split(/\s+/) queries = [] keywords.each do |keyword| queries << sanitize_sql_for_conditions( "(classifications.species LIKE '%#{keyword}%' OR classifications.family LIKE '%#{keyword}%' OR classifications.trivial_names LIKE '%#{keyword}%' OR place LIKE '%#{keyword}%')") end options[:conditions] = queries.join(' AND ') 现在,sanitize_sql_for_conditions不起作用! 它返回只返回原始字符串。 如何重写此代码以逃避恶意代码?

更好的SQL – :group vs.:select =>’DISTINCT’

让我们假设三个模型,标准连接: class Mailbox :addresses end class Address < ActiveRecord::Base belongs_to :mailbox belongs_to :domain end class Domain :addresses end 现在很明显,如果对于任何给定的邮箱,您想知道它在哪个域中有地址,您有两种可能的方法: m = Mailbox.first # either: SELECT DISTINCT domains.id, domains.name FROM “domains” INNER JOIN # “addresses” ON “domains”.id = “addresses”.domain_id WHERE # ((“addresses”.mailbox_id = 1)) m.domains.all(:select => ‘DISTINCT domains.id, domains.name’) # or: SELECT domains.id, domains.name FROM “domains” […]

Rails 3查询:使用’select’和’order’时出错

我试图回答这个问题 ,我得到了这个问题。 我有一个具有id , email和first_name列的用户模型。 因此,在单个查询中,我想选择具有不同first_name用户,通过email对其进行排序并获取其ID 。 我怎样才能做到这一点? 什么行不通: User.select(:first_name).uniq.pluck(:id) 因为它触发了这个SQL SELECT DISTINCT “users”.”id” FROM “users” 。 这是从用户中选择不同的id。 但是我们想要选择不同的first_name User.order(“email DESC”).pluck(:id).uniq SQL生成: SELECT “users”.”id” FROM “users” ORDER BY email DESC 。 这不起作用,因为生成的sql不检查first_name的唯一性。

是否可以使用`ORDER BY FIELD`语句对多列进行排序?

我正在使用Ruby on Rails 3.2.2,我想知道是否可以通过使用ORDER BY FIELD语句来订购多个列/字段(例如,在Model.order(“orders_count, created_at, name, …”)但是对于ORDER BY FIELD )。 如果是这样,我怎么能“按ORDER BY FIELDS ”? PS :如前面的答案中所述 ,为了订购与一栏相关的记录,我使用的是Model.order(“field(status, ‘blocked’, ‘unpublished’, ‘published’)”)语句。