嵌套SQL选择查询并使用Rails编写它

时间:2013-03-15 17:18:59

标签: mysql sql ruby-on-rails activerecord

我所拥有的是一个Skus模型/表,其中有几列代表类别。还有三列用于描述主要,次要,微格式的版本号。

我想根据三个Sku类别选择每个Sku的最高版本。

最初我尝试使用MAX和'group',但这对于三个版本号列(0 0 5被认为大于0 1 0)不能很好地工作。所以我在三个版本列上使用'order by',然后使用'group by'执行'select',得到我想要的结果:


SELECT * FROM 
(
  SELECT *
  FROM skus
  WHERE category1_id = 3
  ORDER BY ver_major, ver_minor, ver_micro
) 
GROUP BY category2_id, category3_id, category4_id

我想知道的是,这是否特别低效(因为嵌套选择或其他方式)?

最重要的是,如何使用Rails ActiveRecord编写此(或更好)的查询?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

从数据库设计的角度来看,将类别ID放入skus表中绝不是一个好主意。

一个sku可能有很多类别,一个类别可能有很多skus。您需要一个包含两个字段(sku_id和category_id)的连接表来存储关系。

Rails中的建模看起来像

class Sku < ActiveRecord::Base
  has_and_belongs_to_many :categories
end

class Category < ActiveRecord::Base
  has_and_belongs_to_many :skus
end

参考:http://guides.rubyonrails.org/association_basics.html#the-has_and_belongs_to_many-association