我所拥有的是一个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编写此(或更好)的查询?
感谢您的帮助
答案 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