2011-07-07 16 views
0

現在、カテゴリとその投稿者のユーザー名とともに一連のジョブを返す次のクエリを実行しています。フィードバックスコアを検索結果に統合する方法

SELECT job_id, user_id, title, profiles.user_name 
FROM (jobs) 
JOIN profiles ON jobs.user_id = profiles.user_id 
JOIN job_categories ON jobs.cat_id = job_categories.cat_id 
JOIN job_sub_categories ON jobs.sub_cat_id = job_sub_categories.sub_cat_id 
WHERE `status` = 'open' 
ORDER BY post_date desc 
LIMIT 5 

私は以前の取引(eBayとよく似ています)に基づいて、特定の雇用者のフィードバック行を保持するfeedbackテーブルを持っています。

feedback_id|employer_id|job_id|performance_score|quality_score|availability_score|communication_score

私が行うことができるようにしたいどのような雇用電流帰還の評価に基づいて、私の結果をソートし、フィルタリングすることであると私は私のクエリにこれを追加するかどうかはわかりません。私の質問の中で数学をやるか、おそらくサブクエリを実行しなければならないようです。または、特定のレーティングに対して与えられた総フィードバックなどの別のフィールドを含むようにフィードバックテーブルを変更する必要がありますか?

ご協力いただければ幸いです。

評価を4フィールド(性能、品質、利用可能性及び通信)が獲得されているため、その後数4で割った行の数で割っ一緒に添加フィードバックスコアの全てで算出されるので、feedback_avg = (feedback_total/num_rows)/4

答えて

1

私をしましょう試してみます。 2台のテーブルがあるとします。employers: [id, name]feedback: [id, employer_id, score]です。

まずオフ、スコアサブクエリ:今メインクエリ

SELECT employer_id, SUM(score) AS total_score, COUNT(*) AS num_rows 
     FROM feedback GROUP BY employer_id; 

SELECT name, total_score/num_rows AS avg_score 
     FROM employers JOIN ([subquery]) AS sq ON(employers.id = sq.employer_id) 
     WHERE avg_score > 0.5; 

が指示位置に全サブクエリを貼り付け。


ヒント:ビュー

あなたが好きなら、あなたはサブクエリ永久ビュー行い、メインクエリでそれを使用することができます。

CREATE VIEW score_tally AS 
SELECT employer_id, SUM(score) AS total_score, COUNT(*) AS num_rows 
     FROM feedback 
     GROUP BY employer_id; 

SELECT name, total_score/num_rows AS avg_score 
     FROM employers JOIN score_tally ON(employers.id = score_tally.employer_id) 
     WHERE avg_score > 0.5; 

ヒント(再び):上記のヒントはばかげていたので、組み込みのAVG

CREATE VIEW score_tally AS 
SELECT employer_id, AVG(score) AS avg_score 
     FROM feedback 
     GROUP BY employer_id; 

SELECT name, avg_score 
     FROM employers JOIN score_tally ON(employers.id = score_tally.employer_id) 
     WHERE avg_score > 0.5; 

のは、あなたの完全なクエリがどのように見えるかを推測してみましょう:

SELECT job_id, 
     user_id, 
     title, 
     profiles.user_name AS user_name, 
     avg_score 

     FROM jobs 
      JOIN profiles ON(jobs.user_id = profiles.user_id) 
      JOIN job_categories ON(jobs.cat_id = job_categories.cat_id) 
      JOIN job_sub_categories ON(jobs.sub_cat_id = job_sub_categories.sub_cat_id) 
      JOIN (SELECT employer_id, AVG(score) AS avg_score FROM feedback GROUP BY employer_id) AS sq 
       ON(employers.id = sq.employer_id) 

     WHERE status = 'open' AND avg_score > 0.5 

     ORDER BY post_date desc 
     LIMIT 5 
関連する問題