|
You last visited: Today at 20:28
Advertisement
SQL TRIGGER
Discussion on SQL TRIGGER within the Web Development forum part of the Coders Den category.
05/01/2014, 21:07
|
#1
|
elite*gold: 0
Join Date: Sep 2010
Posts: 389
Received Thanks: 33
|
SQL TRIGGER
Hallo,
ich möchte in meiner DB einen TRIGGER erstellen.
Und zwar soll dieser aktiviert werden wenn, in der tabelle "Account" ( enthält: ID (PK), AccName, Level ) das level auf "35" gesetzt wird. Anschließend soll in der Tabelle " Switch " ein neuer eintrage mit ID(Fremdschlüssel von Account), und Anzahl 3 erstellt werden.
Ich habe es mir ungefähr so vorgestellt, nur leider funktioniert meine vorstellung nicht  Wäre auch zu schön.
PHP Code:
CREATE TRIGGER switcher_update AFTER UPDATE ON account FOR EACH ROW BEGIN IF `level` = "20" THEN INSERT INTO switcher (ID, Switcher) VALUES (new.id, 3);
Kann mir jemand helfen?
|
|
|
05/02/2014, 00:15
|
#2
|
elite*gold: 0
Join Date: Feb 2010
Posts: 72
Received Thanks: 32
|
1. Nimm bitte mal den ganzen Ausdruck, und setz ihn in einen Block mit einem anderen Delimiter.
Code:
DELIMITER //;
<HIER IST DEIN STATEMENT>
//
DELIMITER ;//
2. Einen IF und BEGIN Block solltest du mit END IF und END schließen
Code:
BEGIN
IF
#####
END IF;
END;
Ich bin leider gerade nicht zuhause, also habe ich keine Möglichkeit es zu probieren, aber ich vermute das der Punkt 1 dein Fehler ist.
|
|
|
05/02/2014, 11:18
|
#3
|
elite*gold: 0
Join Date: Sep 2010
Posts: 389
Received Thanks: 33
|
Vielen Dank, das hat erstmal schon geholfen.
Ich bin auch weiter vorran gekommen. Habe eine Funktion erstellt
PHP Code:
DELIMITER // CREATE PROCEDURE test1 BEGIN DECLARE mid INTEGER; DECLARE ALT INTEGER; SELECT `Alter` FROM tabelle1 WHERE `Alter` = 18 INTO ALT; IF (`ALT` >= 18) THEN SELECT ID FROM tabelle1 WHERE `alter` = 18 INTO mid; INSERT INTO tabelle2 (`ID`,`Punkte`) VALUES (mid,"100"); ELSE SELECT * from tabelle1; END IF; END // DELIMITER ;
Das funktioiert auch gut, sobald das alter einer Person auf 18 gesetzt wird und ich die funktion ausführe. Wird automatisch ein Eintrag in tabelle 2 mit der jeweiligen ID und dem Punktestand 100 erstellt.
Meine letztes Problem ist nun, sobald mehrere Personen 18 sind und ich diese Funktion ausführe kommt eine Fehlermeldung.
Code:
#1172 - Result consisted of more than one row
PS: Nicht wundern Spalten Namen sind anders. && Die ELSE funktion ist vorerst sinnlos.
|
|
|
05/02/2014, 13:07
|
#4
|
elite*gold: 0
Join Date: Feb 2010
Posts: 72
Received Thanks: 32
|
Das Problem ist das du in die Variable ALT alle Werte hineinschreibst, bei denen der Wert 18 ist. Die Variable kann aber nur einen Wert enthalten, und falls mehrere Spalten diesen Wert aufweisen tritt der Fehler auf.
Du kannst das z.B. mit einem INSERT und einem SELECT als Subquery lösen.
e.G.
Code:
INSERT
INTO tabelle2
(`ID`,`Punkte`)
SELECT ID, "100"
FROM tabelle1
WHERE alter >= 18;
Damit würden alle Spalten mit dem Wert 18 in die tabelle2 geschrieben.
Außerdem hat deine IF Verzweigung keinen Sinn gemacht, denn du holst alle Werte, die bei Alter GENAU 18 haben, und überprüfst dann, ob es welche gibt die größer oder gleich 18 sind
Code:
SELECT `Alter` FROM tabelle1 WHERE `Alter` = 18 INTO ALT;
IF (`ALT` >= 18) THEN
#edit So viele Rechtschreibfehler.. ahhhhh o.O
|
|
|
05/02/2014, 16:26
|
#5
|
elite*gold: 0
Join Date: Sep 2010
Posts: 389
Received Thanks: 33
|
Hm so funktioniert es leider nicht. Nach INSERT INTO muss VALUES folgen und keine abfrage, so kenn ich es zumindest, und so funktioniert es leider auch nur.
Aber du hast recht war vieles sinnfrei der neue code sieht so aus :
PHP Code:
BEGIN DECLARE ALT INTEGER; SELECT `ID` FROM tabelle1 WHERE `Alter` >= 18 INTO ALT; INSERT INTO tabelle2 (`ID`,`Punkte`) VALUES (ALT,"100"); END
Das funktioniert auch, nur leider noch nicht mit mehreren einträgen
|
|
|
05/02/2014, 16:59
|
#6
|
elite*gold: 0
Join Date: Feb 2010
Posts: 72
Received Thanks: 32
|
Nun es sollte theoretisch funktionieren.
Google's erster link ist:
|
|
|
05/03/2014, 11:28
|
#7
|
elite*gold: 0
Join Date: Sep 2010
Posts: 389
Received Thanks: 33
|
Super ! Es funktioniert ! :-)
Allerdings noch ein Problem, nun werden zwar auch mehrer Zeilen übertragen, allerdings auch schon übertragene ID's werden auch erneut übertragen beim wiederholen der Funktion.
Lässt sich das vermeiden?
Lässt sich das vermeiden?[/quote]
PHP Code:
BEGIN INSERT INTO tabelle2 (`ID`,`Punkte`)SELECT ID,100 FROM tabelle1 WHERE `alter` = 20; END
|
|
|
05/03/2014, 12:08
|
#8
|
elite*gold: 0
Join Date: Feb 2010
Posts: 72
Received Thanks: 32
|
Code:
AND ID NOT IN(SELECT ID FROM tabelle2)
Wenn du das an dein WHERE anhängst, überträgt er nur diejenigen, dessesn id noch nicht in der tabelle2 sind
|
|
|
05/03/2014, 12:44
|
#9
|
elite*gold: 0
Join Date: Sep 2010
Posts: 389
Received Thanks: 33
|
Ah klar hätte ich auch selber drauf kommen können, vielen dank !
|
|
|
Similar Threads
|
MW2 Trigger-Aim (no WH)
03/27/2013 - Call of Duty Hacks, Bots, Cheats & Exploits - 12 Replies
MW2 Trigger-Aim (no WH)
https://www.virustotal.com/de/file/a756c4ec0d6a32 cae0e342bccc099f41df8b8a4c01b4eb0b3a7ded70c4eef423 /analysis/1364154018/
|
CS:S Trigger Bot !! [ HOT ] bY F!n4L
12/15/2012 - Counter-Strike Hacks, Bots, Cheats & Exploits - 32 Replies
TRIGGER !!!
VAC UNDETECTED
100% Viren Frei !!
Downlaod Link :
Download: External_Trigger_by_Fn4L.rar | xup.in
|
All times are GMT +2. The time now is 20:29.
|
|