2016-02-28 162 views
0

我創建了一個MySQL的表名「會員」,其中支付和電子錢包兩列......我要讓ewallet柱之間,使得它會自動更新時支付將更新..規則會ewallet=0.75*payment。怎麼可能?列取決於其他列

有另一列「enroller_id」,通過它我是計算左計數,並與PHP函數

function getTotalLeg($node,$leg){ 
$sql="select enrolled_id from members where enroller_id='$node' and tside='$leg' and active='1'"; 

$res=mysql_query($sql); 

global $total; 

$total=$total+mysql_num_rows($res); 
$row=mysql_fetch_array($res); 

if($row['enrolled_id']!=''){ 
    getTotalLeg ($row['enrolled_id'],0); 
    getTotalLeg ($row['enrolled_id'],1); 
    } 

return $total; 
} 

是否有可能在數據庫中算它的正確計數下線?請詳細幫助我。提前致謝。

+1

看一看[觸發器](HTTP://dev.mysql。 COM/DOC/refman/5.7/EN /觸發syntax.html)。在與[存儲過程]的合成(https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-stored-procedures.html)你可以做的相當有趣的事情:) –

回答

1

你可以使用generated columns(MySQL的5.7.6+):生成列的

值從包括在列定義的表達式被計算。

生成列定義具有以下語法:

COL_NAME DATA_TYPE [總是GENERATED] AS(表達)[虛| STORED] [UNIQUE [KEY] [註釋評論] [NOT] NULL] [PRIMARY] KEY]

CREATE TABLE members(
    ..., 
    ewallet DECIMAL(14,4) AS (0.75 * payment) 
); 
+0

兩澄清:這不是**的MySQL 5.7 + ** - 這是** 5.7.6 + **。源是您提供給MySQL文檔的鏈接(節「CREATE TABLE和生成的列」)。二 - [這個答案](http://stackoverflow.com/a/4708560/25429)包含了一些重要的觀點,爲什麼類似用途的情況下不應該以'計算/計算column'來實現。 – zloster

+0

@ zloster是的,5.7.6。第二部分一如既往,取決於。 – lad2025

+0

因爲「這取決於」我已經加了我的話。我們不能確定提問者是否已經考慮過這些影響:) – zloster