2016-10-28 9 views
0

私は学校でサッカーデータベースのトリガーを書いた:トリガーで選択すると、1つ以上の値が返されますか?

SELECT * FROM bundesliga.tippscheine; 
delimiter | 
drop trigger if exists control_tip_konto| 
create trigger control_tip_konto after insert on tippscheine 
for each row 
begin 
declare temp INT; 
set temp = (select new.TPS_Einsatz from tipper join tippscheine where TP_ID=TPS_Tipper_ID); 
if(new.TPS_Einsatz>temp) 
then 
update tippscheine join tipper on TP_ID=TPS_Tipper_ID set new.TPS_Einsatz = temp where TP_ID=TPS_Tipper_ID and new.TPS_Tipper_ID=TPS_Tipper_ID; 
end if; 
end | 
delimiter ; 

それがユーザーのアカウントのバランスを見なければならないと、彼はその後、彼が現在持っているより多くのお金を賭けたい場合は、トリガが賭けを設定する必要があります(すなわち、誰かが$ 20の勘定残高を持ち、$ 22を賭けたいと思う人は、賭けを$ 20に戻すべきです)

問題は、選択クエリが1つ以上の値を返すということです。私が "新しい"を使用する場合。変数の前に、トリガが解決した後に現在追加されているデータのみを選択する必要がありますか?ここで

トリガに使用される2つのテーブルです:

+--------+--------------+---------------+--------------------+------------------+-----------------+-------------+------------+---------------+---------------+ 
| TPS_ID | TPS_SpieleID | TPS_Tipper_ID | TPS_HeimM.   | TPS_Ausw.M.  | TPS_Getippt auf | TPS_Einsatz | TPS_Gewinn | TPS_Tore Heim | TPS_Tore Aus. | 
+--------+--------------+---------------+--------------------+------------------+-----------------+-------------+------------+---------------+---------------+ 
|  1 |   1 |    1 | FC Bayern Muenchen | SV Werder Bremen | 1    |   5 |   10 | L    | L    | 
|  2 |   1 |    2 | FC Bayern Muenchen | SV Werder Bremen | L    |   5 |   10 | 3    | 0    | 
|  3 |   1 |    3 | FC Bayern Muenchen | SV Werder Bremen | 1    |   5 |   10 | L    | L    | 
|  4 |   1 |    4 | FC Bayern Muenchen | SV Werder Bremen | L    |   10 |   20 | 5    | 0    | 
|  5 |   2 |    1 | Borussia Dortmund | 1. FSV Mainz 05 | 1    |   5 |   10 | L    | L    | 
|  6 |   2 |    2 | Borussia Dortmund | 1. FSV Mainz 05 | 2    |   10 |   20 | L    | L    | 
|  7 |   3 |    3 | 1. FC Koeln  | SV Darmstadt 98 | X    |   5 |   10 | 2    | 2    | 
|  8 |   3 |    4 | 1. FC Koeln  | SV Darmstadt 98 | L    |   10 |   20 | 1    | 2    | 
|  9 |   4 |    1 | Hamburger SV  | FC Ingolstadt 04 | 1    |   5 |   10 | L    | L    | 
+--------+--------------+---------------+--------------------+------------------+-----------------+-------------+------------+---------------+---------------+ 

とも:

+-------+-------------------+-------------------+--------------------------------+--------------------+--------------------+----------+ 
| TP_ID | TP_Synonym  | TP_Beigetreten am | TP_Email      | TP_Gewonnene Tipps | TP_Verlorene Tipps | TP_Konto | 
+-------+-------------------+-------------------+--------------------------------+--------------------+--------------------+----------+ 
|  1 | Adil_Abi   | 08.09.2016  | [email protected]    |     0 |     0 |  0 | 
|  2 | IterranI   | 08.09.2016  | [email protected]     |     0 |     0 |  0 | 
|  3 | Ich1212   | 08.09.2016  | [email protected]    |     0 |     0 |  0 | 
|  4 | Die_Weiße_Gefahr | 08.09.2016  | Die_Weiß[email protected]  |     0 |     0 |  0 | 
|  5 | G0tt    | 08.09.2016  | [email protected]    |     0 |     0 |  0 | 
|  6 | Grandfire   | 08.09.2016  | [email protected]    |     0 |     0 |  0 | 
|  7 | test123testem  | 08.09.2016  | [email protected] |     0 |     0 |  0 | 
|  8 | OliOberkrass  | 08.09.2016  | [email protected]  |     0 |     0 |  0 | 
|  9 | SwaggimacSwagson | 08.09.2016  | [email protected]    |     0 |     0 |  0 | 
| 10 | Betonmicha  | 08.09.2016  | [email protected]   |     0 |     0 |  0 | 
| 11 | kekm8    | 08.09.2016  | [email protected] |     0 |     0 |  0 | 
| 12 | Duffman   | 08.09.2016  | [email protected]   |     0 |     0 |  0 | 
| 13 | Bielzer   | 08.09.2016  | [email protected]  |     0 |     0 |  0 | 
| 14 | ares    | 08.09.2016  | [email protected]     |     0 |     0 |  0 | 
| 15 | spidi    | 08.09.2016  | [email protected]    |     0 |     0 |  0 | 
| 16 | AkaNixon   | 08.09.2016  | [email protected]    |     0 |     0 |  0 | 
| 17 | Besserwisserin | 08.09.2016  | [email protected]   |     0 |     0 |  0 | 
+-------+-------------------+-------------------+--------------------------------+--------------------+--------------------+----------+ 

私はデータベースへのかなり新しいですし、持っていない誰かが私にこれを説明することを願ってまだ多くの経験を集めました。

答えて

0

はるかに簡単です。

SELECT OLD.bet = LEAST(OLD.bet, account_balance) FROM ...; 

のようなものはありませんUPDATEなど

関連する問題