SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 28.07.2014, 12:27:44
Jabberwocky Jabberwocky ist offline
Anfänger
 
Registriert seit: Jul 2014
Alter: 37
Beiträge: 8
Trigger

Hallo zusammen
Ich bin an einer Datenbank für ein ERP System dran (Schulprojekt)
Jetzt möchte ich mittels Trigger automatisch eine Bestellung auslösen, wenn der Mindestbestand des Artikels erreicht wird. So weit so gut.
Der Trigger wird vor einem Update der Tabelle Artikel ausgelöst. In der Tabelle Bestellung gibt es das Attribut "ArtikelID"
Kurzes Beispiel
Bestellung(ID, ArtikelID, Menge) values (@ID, ?, 10) ID und Menge sind nicht das Problem, sondern die ArtikelID. Ich möchte die ID des Artikels setzen, welcher den Trigger ausgelöst hat. So in der Art this.ID oder so ähnlich.
Leider habe ich nichts gefunden was mir weiterhilft.
Liebe Grüsse
Jabberwocky
Mit Zitat antworten
  #2  
Alt 28.07.2014, 17:18:11
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Trigger

Zitat:
Zitat von Jabberwocky Beitrag anzeigen
Leider habe ich nichts gefunden was mir weiterhilft.
Liebe Grüsse
Jabberwocky
NEW.* und OLD.* enthalten in TRIGGER-Funktionen die Spalten.
Mit Zitat antworten
  #3  
Alt 31.07.2014, 09:31:25
Jabberwocky Jabberwocky ist offline
Anfänger
 
Registriert seit: Jul 2014
Alter: 37
Beiträge: 8
AW: Trigger

Mit NEW.* und OLD.* werden doch Bedingungen gesetzt sowie Einträge in der Tabelle geändert? Ich sehe hier den Zusammenhang zu meinem Problem nicht ganz.

Das Attribut ArtikelID ist ein Foreign Key welcher zur ID des Artikels verweist. Diese ändert sich ja nicht, da eine neue Bestellung des entsprechenden Artikels gemacht werden muss.
Mit Zitat antworten
  #4  
Alt 31.07.2014, 14:09:23
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Trigger

Zitat:
Zitat von Jabberwocky Beitrag anzeigen
Mit NEW.* und OLD.* werden doch Bedingungen gesetzt sowie Einträge in der Tabelle geändert? Ich sehe hier den Zusammenhang zu meinem Problem nicht ganz.

Das Attribut ArtikelID ist ein Foreign Key welcher zur ID des Artikels verweist. Diese ändert sich ja nicht, da eine neue Bestellung des entsprechenden Artikels gemacht werden muss.
Was willst Du machen? Du hast eine Tabelle mit den Artikeln. Da wird der Bestand reduziert, wenn was rausgenommen wird, oder? Und Du willst, wenn der Bestand unter Mindestbestand fällt, in einer anderen Tabelle die Artikel-ID einwerfen, oder?
Mit Zitat antworten
  #5  
Alt 02.08.2014, 15:30:47
Jabberwocky Jabberwocky ist offline
Anfänger
 
Registriert seit: Jul 2014
Alter: 37
Beiträge: 8
AW: Trigger

Ganz genau. Ich habe eine Tabelle mit Artikeln, wenn ein Artikel unter den Mindestbestand fällt gibt es einen neuen Datensatz in der Tabelle Bestellung. Dort wird die Artikel-ID des Artikels benötigt, welcher die Bestellung auslöst.
Mit Zitat antworten
  #6  
Alt 02.08.2014, 15:52:28
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
Genau. Und dazu kannst Du NEW.* verwenden.

Code:
test=# create table artikel (id int primary key, anzahl int, mindestbestand int);
CREATE TABLE                                                                     
Time: 101,304 ms                                                                 
test=*# create table bestellung (artikel int references artikel, menge int);     
CREATE TABLE                                                                     
Time: 26,043 ms
test=*# create or replace function neue_bestellung() returns trigger as $$begin insert into bestellung values (new.id, new.mindestbestand); return new; end; $$ language plpgsql;
CREATE FUNCTION
Time: 24,496 ms
test=*# create trigger trg_bestellung after update on artikel for each row when (new.anzahl < new.mindestbestand) execute procedure neue_bestellung();
CREATE TRIGGER
Time: 23,752 ms
test=*# insert into artikel values (1, 12, 10);
INSERT 0 1
Time: 0,514 ms
test=*# select * from bestellung;
 artikel | menge
---------+-------
(0 rows)

Time: 0,334 ms
test=*# update artikel set anzahl = anzahl - 4;
UPDATE 1
Time: 11,364 ms
test=*# select * from bestellung;
 artikel | menge
---------+-------
       1 |    10
(1 row)
Selbsterklärend, oder?

PS.: um zu verhindern, daß bei der nächsten Abbuchung noch einmal bestellt wird, einfach in der bestellen-Tabelle einen Unique Index auf Artikel-ID.
Mit Zitat antworten
  #7  
Alt 03.08.2014, 19:09:58
Jabberwocky Jabberwocky ist offline
Anfänger
 
Registriert seit: Jul 2014
Alter: 37
Beiträge: 8
AW: Trigger

Alles klar, jetzt verstehe ich was du meinst. Ich werde das morgen gleich mal versuchen. Vielen Dank für deine Hilfe
Mit Zitat antworten
  #8  
Alt 16.08.2014, 12:26:23
Jabberwocky Jabberwocky ist offline
Anfänger
 
Registriert seit: Jul 2014
Alter: 37
Beiträge: 8
AW: Trigger

Vielen Dank nochmal für eure Hilfe. Das Script wird jetzt ohne Fehler ausgeführt.
Jetzt stehe ich jedoch an einem anderen Problem.
Ich habe dem Trigger gesagt, er soll eine Bestellung ausführen, sobald der Bestand des Artikels kleiner als 5 ist. Blöderweise ist es jetzt nicht mehr möglich den Bestand eines Artikels unter 5 zu setzen. Leider leuchtet mir nicht ein worin genau der Fehler besteht.
Ich vermute jedoch das meine if abfrage das Problem verursacht.
if old.lagerbestand <> new.lagerbestand and new.lagerbestand < 5 then

Vielen Dank für eure Hilfe
Mit Zitat antworten
  #9  
Alt 16.08.2014, 14:27:45
pguser pguser ist offline
Junior Member
 
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
AW: Trigger

In meinem Beispiel funktioniert das.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Trigger mit mehreren Statements fips MySQLi/PDO/(MySQL) 1 05.01.2010 12:46:53
Umlaute in Trigger ingoloos MySQLi/PDO/(MySQL) 2 11.07.2008 09:22:03
MySQL Trigger snuger MySQLi/PDO/(MySQL) 0 22.04.2008 11:47:41
Trigger löst ERROR 1054 aus Frank007 MySQLi/PDO/(MySQL) 0 19.03.2008 16:55:31
Trigger Kollationsfehler tritones MySQLi/PDO/(MySQL) 1 01.10.2006 05:19:47


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:57:54 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt