2

アクティブクエリでこのようなことを行うにはどうすればよいですか?

select product.*, count(product_id) AS product_counts
group by(product.*) 
order by product_counts;

私はこれをアクティブクエリで試しました:

Product.select("product fields, count(product_id) AS product_counts").group("product fields").order(product_counts)

返される結果セットには、正しいカウント順序で並べ替えられた製品のみが含まれ、カウント値は含まれていません。.to_sqlを実行すると、正しいSQLが返されます。

dbで効率的にしながら、これまたは同様のことをどのように行うことができますか?

もう1つの関連する質問は、アクティブなクエリで.select("product.*)またはを実行するにはどうすればよいですか?.group("product.*")今、私はすべてのフィールドをリストアップする必要があります。.group("product.id, product.name, product.price...etc")

4

1 に答える 1

0

@ケビン、

実際には product_counts を取得していますが、注意すべき唯一のことは、仮想属性がコンソールに表示されないことです。

products = select product.*, count(product_id) AS product_counts
group by(product.*) 
order by product_counts;

#You can access the product_counts just as you would expect
products.first.product_counts

質問 2: group("product.*") で何を達成しようとしているのかわかりません。個別の行を取得したい場合は、select で DISTINCT を使用できます。例: Product.select("DISTINCT *")

于 2011-12-21T04:31:23.367 に答える