2016-04-18 21 views
1

カラムのデフォルト値はクエリの結果である可能性があります。これにより、値がクエリされるたびに値が自動的に更新されますか?クエリの結果となるデフォルトのMySQL値

は私がメンバーとデシベルとキャンセルのテーブルを持っていると私は自動的に移入する以下の擬似クエリの結果であるとmembers.NumberOfCancellations値を希望:

がキャンセルからすべてを選択キャンセルを持っています.date cancellations.memberidが$ phpvariableと等しい今日から31日以内

これはphpとselect/updateスクリプトで行うことができますが、phpmyadminがこの機能を持っている可能性がありますことを知っていますか?あなたのmembersテーブルがすでにカウントキャンセルに列がない場合は

______________________________________________________________ 
|memberid | firstname | lastname | numberofcancellations| 
______________________________________________________________ 
|1   | john  | doe  | resultofquery(= 2) | 
|2   | Dave  | Smith  | resultofquery (=1) | 
______________________________________________________________ 

___________________________________ 
|id |memberid | date | time | group | 
___________________________________ 
|1  |1   |2016-04-19 | 08:00 | 1  | 
|2  |2   |2016-04-18 | 13:00 | 4  | 
|3  |1   |2016-04-15 | 18:00 | 3  | 
_______________________________________________ 
+1

はあなたが説明に顔を置くためにいくつかのサンプルの入力と出力を含めることはできますか? –

+0

いいえこれをあなたの質問に含め、表形式にしてください。 –

+0

は、 –

答えて

0

、それを追加します。

UPDATE members t1 LEFT JOIN 
(
    SELECT memberid, COUNT(*) AS numberofcancellations 
    FROM cancellations 
    WHERE date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE() 
    GROUP BY memberid 
) t2 
    ON t1.memberid = t2.memberid 
SET t1.numberofcancellations = COALESCE(t2.numberofcancellations, 0) 

ALTER TABLE members ADD numberofcancellations int AFTER lastname; 

は今、あなたはキャンセル数でmembersを更新することができます最初にこの列を移入するには、この照会を1回実行する必要があります。あなたは、単一のメンバーを更新したい場合は、UPDATEステートメントにWHERE条件を追加することができます。

UPDATE members t1 LEFT JOIN 
(
    SELECT memberid, COUNT(*) AS numberofcancellations 
    FROM cancellations 
    WHERE date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE() 
    GROUP BY memberid 
) t2 
    ON t1.memberid = t2.memberid 
SET t1.numberofcancellations = COALESCE(t2.numberofcancellations, 0) 
WHERE t1.memberid = 1 -- or whatever value you want 
+0

に追加されています。更新クエリーを(そのカラムが他のクエリーからクエリされるたびに)、またはx時間ごとに実行する方法はありますか? –

+0

はい、これを行うためのトリガーを作成することができます。しかし、私は私の答えにそれ以上は追加しません。これについて別の質問をしてください。 –

+0

答えをいただきありがとうございます、私の質問は、しかしそれでした。 –

関連する問題