0

我拥有的是一个 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 编写这个(或更好的)查询?

谢谢你的帮助

4

1 回答 1

0

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

一个sku可能有很多分类,一个分类可能有很多sku。您需要一个包含两个字段(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

于 2013-03-15T17:41:31.260 回答