SQL-Befehl automatisch ausführen lassen, wenn ...

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

SQL-Befehl automatisch ausführen lassen, wenn ...

Postby orta » 25. November 2007 11:10

Hi,

ich habe eine Homepage mit typo3 gemacht. Nun können dort Nutzer neue Daten eingeben die dann in der Datenbank abgespeichert werden. Es wird also ein neuer Datensatz erstellt.

Ich möchte nun, dass mysql automatsisch, nach erstellung dieses Datensatzes, einen SQL befehl ausführt.

Wie mache ich das am besten bzw. einfachsten?

Allerdings sind meine PHP-Kenntnisse gering, deshalb dachte ich, dass es bei mysql vielleicht etwas gibt!

Danke,
Orta

Mein System:-->Debian: 4.0 --> Typo3: 4.1.2 (aus YAML Komplettpaket)--> PHP Version 5.2.0-8+etch7 -->MYSQL: 5.0.32-Debian_7etch1
orta
 
Posts: 4
Joined: 25. November 2007 11:04

Postby Scory » 25. November 2007 16:34

Eine Automatik gibt es nicht. Es wird Dir nichts anderes übrig bleiben als im PHP-Quelltext die SQL-Statements zu suchen und am gewünschten Ort den neuen Befehl einfügst.

Grüße
Scory
Scory
 

Postby sari42 » 25. November 2007 16:53

sari42
 
Posts: 800
Joined: 27. November 2005 18:28

Postby orta » 25. November 2007 21:50

"Trigger" scheint das zu sein was ich benötige. Allerdings habe ich nicht soviel ahnung davon, vielleicht kann mir jemand das kurz zusammenbauen?

1.)Ich benutze phpmyadmin und habe auch über linux eine Verbindung zur Datenbank
2.)Also, wenn ein Datensatz in der Datenbank "alfa1" der Tabelle "tx_cfcleague_profiles" eingefügt wird, dann soll
3.) dieser SQL Befehl ausgeführt werden:
UPDATE tx_cfcleague_teams SET `link_report`= '0';
UPDATE tx_cfcleague_teams SET `link_report`= '1' WHERE `players`!= '';

Danke,
Orta
orta
 
Posts: 4
Joined: 25. November 2007 11:04

Postby orta » 26. November 2007 15:01

Hi,
hab nun etwas selber experimentiert.

1.)Trigger der nicht funktioniert:
CREATE TRIGGER trgTeamsLinkReportAufOn
AFTER INSERT ON tx_cfcleague_profiles
FOR EACH ROW BEGIN
UPDATE tx_cfcleague_teams SET `link_report`= '0';
UPDATE tx_cfcleague_teams SET `link_report`= '1' WHERE `players`!= '';
END;

bis hierher bin ich selber gekommen, allerdings meldet er mir einen Fehler beim erstellen des Triggers:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE tx_cfcleague_teams SET `link_report`= '0'' at line 4

2.)Trigger der Funktioniert, aber ohne BEGIN...END:
CREATE TRIGGER trgTeamsLinkReportAufOn
AFTER INSERT ON tx_cfcleague_profiles
FOR EACH ROW
UPDATE tx_cfcleague_teams SET `link_report`= '0';

Also TRIGGER kann ich zwar erstellen, aber irgendwie kann meine MYSQL Version (5.0.32)keine BEGIN..END im TRIGGER verarbeiten oder ich mach da was anderes falsch.

Orta
orta
 
Posts: 4
Joined: 25. November 2007 11:04

Postby Hanspeter Thöni » 26. November 2007 19:28

Dein Problem könnte 'Delimiter' heissen.

Damit innerhalb des Triggers ';' eingegeben werden können muss ein anderes Zeichen als Delimiter eingestellt werden. Sonst will Mysql das Create Trigger kommando beenden, was natürlich mit Syntax Error quitiert wird.

Auszug aus der Doku:
Code: Select all
CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(
  a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  b4 INT DEFAULT 0
);

DELIMITER |

CREATE TRIGGER testref BEFORE INSERT ON test1
  FOR EACH ROW BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1; 
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
  END;
|

DELIMITER ;
Gruss Hanspeter
User avatar
Hanspeter Thöni
 
Posts: 233
Joined: 17. August 2004 10:29
Location: Schweiz

Postby orta » 27. November 2007 15:30

Ja delimiter wars,

bei phpmyadmin kann man, anstatt delimiter extra anzugeben, unten in der Textbox einen Begrenzer auswählen.

Danke euch allen!

Wobei mein Problem leider nicht gelöst wurde, da ich gemerkt habe das ich einen Update brauche der sich auf die selbe Tabelle bezieht. Mein Trigger müßte also heißen:
Code: Select all
DELIMITER ;;
CREATE TRIGGER trgTeamsLinkReportAufOn
AFTER UPDATE ON   tx_cfcleague_teams
FOR EACH ROW BEGIN 
 UPDATE tx_cfcleague_teams SET `link_report`= '0';
 UPDATE tx_cfcleague_teams SET `link_report`= '1' WHERE `players`!= '';
END;
;;
DELIMITER ;

Ich erhalte allerdings einen Fehler:
Code: Select all
#1442 - Can't update table 'tx_cfcleague_teams' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Also kann ich das mit einem Trigger nicht lösen, oder ?
orta
 
Posts: 4
Joined: 25. November 2007 11:04


Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 12 guests