0

私が持っているのは、カテゴリを表すいくつかの列を持つ Skus モデル/テーブルです。メジャー、マイナー、マイクロ形式でバージョン番号を記述するために使用される 3 つの列もあります。

3 つの Sku カテゴリに基づいて、各 Sku の最上位バージョンを選択したいと思います。

最初に MAX と 'group' を使用してみましたが、3 つのバージョン番号列 (0 0 5 は 0 1 0 より大きいと見なされます) ではうまくいきませんでした。そこで、3 つのバージョン列で「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 がある場合があります。リレーションシップを格納するには、2 つのフィールド (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 に答える