2012-02-08 10 views
0

私はレコードのテーブルを持っています。グループ化するか、Rails、ActiveRecord、Heroku、PostgreSQLとDistinctを選択

ユーザー:ID、SCREEN_NAME、私はリストにscreen_namesが重複しないようにSCREEN_NAMEにより、ユーザーとグループのリストを返したい

をつぶやき。

@users = User.all(:group => "screen_name") 

これは、MySQLを使用する場合はうまく動作しますが、PostgreSQLを使用するHerokuにプッシュするときはうまく動作しません。

私はPostgreSQLを使用して同様の結果を得ることができますか?

これには数少ない投稿があるようですが、コメントから答えを見つけられませんでした。

+1

実際にpostgresの結果でmysql likeグループを取得したい場合は、http://stackoverflow.com/questions/1769361/postgresql-group-by-different-from-mysql 'SELECT DISTINCT ON(を参照してください) a)a、b、c、d、e FROMテーブルORDER BY a、b、c ' – Will

+0

ありがとう。 @users = User.all(:select => "DISTINCT ON(screen_name)screen_name、tweet"を試しましたが、ログに「ActiveRecord :: StatementInvalid(PGError:ERROR:列id_list.alias_0が存在しません)」というエラーが表示されました。 – Lee

答えて

2

screen_nameがプライマリキーでない限り、グループ文のすべての列を追加するか、またはそれらを集約する必要があります。しかし、IDやつぶやきは集計できないようです))

.group("id, screen_name, tweet") 

データベースを正規化することもできます。画面名を別の表に入れると、簡単に目的のデータを取得できます。

+1

グループにすべてのフィールドを追加する@users = User.all(:select => "screen_name、tweet"、:group => "screen_name、tweet")残念ながら、すべてのレコード(screen_nameの重複を含む)を返すようです。可能であれば正規化を試みたり避ける – Lee

関連する問題