2016-04-18 90 views
1

列的默認值是否可以作爲查詢的結果,從而只要查詢該值就會自動更新值?缺省MySQL值爲查詢結果

我有一個成員DB和取消表,我想members.NumberOfCancellations值自動填充到低於僞查詢的結果:

從取消選擇所有具有取消.date今天不到31天,其中cancellations.memberid等於$ phpvariable

我知道這可以用php和選擇/更新腳本來完成,但我希望phpmyadmin可能有這個功能?

______________________________________________________________ 
|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

如果您members表還沒有列在取消計數,然後將其添加:

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您將需要運行此查詢一次以初始填充新列。如果您想更新一個成員,那麼你可以添加一個WHERE條件的UPDATE聲明:

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

謝謝你提供的答案,然而我的問題是。 –