2012-06-17 50 views
0

我有一個關於使用續集來排序數據集的問題。續集 - 訂購一對多和多對多模型關聯的數據集

我有表'工作''用戶''意見'。用戶可以申請任何工作,所以我在這裏有一個多對多的關聯(我也有一個'jobs_users'表)。工作和評論代表一對多關聯。我試圖實現如下 - 我想檢索行形式「工作」,通過下令:

  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 

回答

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; 
0

假設用戶只能申請一次(也許在jobs_usersjob_iduser_id使得primary_key限制此你可以通過簡單的分組和計算在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 s表示你正在尋找。