[前][次][番号順一覧][スレッド一覧]

rails:1698

From: Kazuhiro Yoshida <moriq@m...>
Date: Mon, 09 Oct 2006 14:16:33 +0900
Subject: [rails:1698] Re: 親テーブルのカラムで、group by -> count -> order by したい

moriqです。

Takashi Hoshizawa wrote:
> ActiveRecordの使い方について、質問させて下さい。
> 
> class User < ActiveRecord::Base
>   has_many :comment
> end
> 
> class Comment < ActiveRecord::Base
>   belongs_to :user
> end
> 
> のようなクラスがある場合に、
> 
> ・user別にcommenntの件数をカウントする
> ・userのname順でリスト表示
>  (ただしcommentがないuserは表示しない)
> 
> をしたい時、どう書くのがActiveRecord流でしょうか?

edgeだと
    assert_equal [
      [users(:devid),1],
      [users(:tom),2],
      [users(:wilma),1]
    ], Comment.count(:group => :user, :order => 'users.name', :include
=> :user)
こう書けます。

対応する log は
Comment Columns (0.000000)  SHOW FIELDS FROM comments
SQL (0.000000)  SELECT count(DISTINCT comments.id) AS count_all, user_id
AS user_id FROM comments LEFT OUTER JOIN users ON users.id =
comments.user_id GROUP BY user_id ORDER BY users.name
User Load (0.000000)  SELECT * FROM users WHERE (users.id IN (2,1,3))
こうなります。

現行のactiverecord-1.14.4だと
countで:includeを指定すると:groupが効かないようです。

--
ML: rails@r...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

      1697 2006-10-09 04:34 [t_hoshizawa@m...    ] 親テーブルのカラムで、group by -> count -> order by したい
->    1698 2006-10-09 07:16 ┗[moriq@m...          ]                                       
      1699 2006-10-09 23:26  ┗[t_hoshizawa@m...    ]