0

続編を含むデータセットの注文について質問があります。

テーブル'jobs''users''comments' があります。ユーザーはどんな仕事にも応募できるので、ここで多対多の関連付けを行います (「jobs_users」テーブルもあります)。ジョブとコメントは、1 対多の関連付けを表します。私が実装しようとしているのは次のとおりです。次の順序で'jobs'から行を取得したいと思います。

  1. 適用されたユーザー数。

  2. コメントの数 (最もコメントの多いものが最初)。

私は続編を使用しており、これまでのところ明示的なクエリで遊んでいます。そのような順序付けをネイティブの続編の方法で実装するのを手伝ってもらえますか?

簡略化されたデータベースは次のようになります。

create_table :users do
    primary_key     :id
    String          :nickname
end

create_table :jobs do
    primary_key     :id
    Text            :description
end

create_table :jobs_users do
    primary_key     :id
    foreign_key     :job_id
    foreign_key     :user_id
end

create_table :comments do
    primary_key     :id
    Text            :comment
    foreign_key     :user_id
    foreign_key     :job_id
end
4

2 に答える 2

0

ユーザーが一度しか応募できないと仮定します(おそらくprimary_keyjobs_usersテーブルjob_idに作成することでこれを制限user_idし、グループ化して数えるだけで、ジョブの応募数を取得できます。job_id

DB[:jobs_users].group_and_count(:job_id).order(:count.desc).all

コメントも同様です。仕事について最もコメントされるのは:

DB[:comments].group_and_count(:job_id).order(:count.desc).all

現在、これらはどちらも完全なレコードを返しませんが、job_id探しているトップを提供します。

于 2012-06-18T13:19:16.467 に答える
0

あなたはこれを試すことができます -

SELECT j.id,
       COUNT(ju.id) AS appliedcount,
       COUNT(c.id) AS commentcount
FROM jobs j
     JOIN jobs_user ju ON ju.job_id = j.id
     JOIN comments c ON c.job_id = j.id
GROUP BY j.id
ORDER BY appliedcount DESC, commentcount DESC;
于 2012-06-17T17:17:51.403 に答える