私は1日に1回発生するイベントがあります。私は2つのテーブルを持っている:Mysql、テーブルの各行をフェッチするには、次のクエリを変更する方法は?
- アプリケーション
- 評価
は基本的に、各アプリケーションは、テーブルの評価に格納されているユーザによって与えられたすべてのフィードバックの平均によって与えられるavg_score
を有しますフィールドスコア。私は一日一回、この値を更新し、イベントを書きました:
CREATE EVENT MY_DAILY_UPDATE
ON SCHEDULE EVERY 1 DAY STARTS '2011-07-23 23:30:00'
DO
UPDATE application
SET `avg_score`= (SELECT AVG(`score`) as new_score
FROM `rating`
WHERE `ID_APPLICATION` = 1)
WHERE `APPLICATION_ID` = 1
それは動作しますが、のみ= 1 IDを持つアプリケーションのために、私は自分でそれを書いた原因。 代わりに私はテーブルアプリケーションの各アプリケーションのフィールドavg_scoreを更新するために私のクエリが必要です。
私は変数ID(例WHERE APPLICATION_ID
= ID_VARIABLE)で値1を変更する必要があると思います...この変数はアプリケーションテーブル(1、 2,3 ... 4など).......しかし、私はどのように私のクエリを変更するかについては考えていない.....
Tnx多くの人が両方の仕事をしています.......あなたはちょうどそれらの違いは私を説明することができます(2番目のものは私がSQL初心者だから理解するのが難しいです)?最初の方がはるかに簡単に見えます。もう1つ目は速くなります。使用することをお勧めしますか? – Sgotenks
最初のものは、サブクエリをスカラ関数として効果的に使用し、ソーステーブル/クエリの各ローに対して適用します。 APPLICATION_IDを指定すると、AVG(スコア)は何ですか? 2番目のサブクエリはインラインビューとしてサブクエリを使用し、すべてのID_APPLICATIONのAVG(スコア)を取得し、アプリケーションテーブルと結合して、その結合の結果に対してUPDATEを実行します。私はより高速なものを使い、読み書き可能にする方法を見つける傾向があります。性能が似ている場合にのみ、私は読みやすさを得るために低性能を選択します。 – MatBailie