Das Baerlie scheitert mal wieder :D

Kampfgummibaerlie

Datenbank-Guru
Beiträge
728
Also, ich habe folgendes "Problem" gefunden:

Ich würde gerne (falls es kommt), falls alle Maschinen eines Typs gemietet werden, der nächste Zeitpunkt, wo eine frei wird, ausgelesen werden kann.

Muss ich mich da mit einer if-abfrage beschäftigen?

Wenn ja, wie frage ich ab, ob eine Maschine des Typs überhaupt schonmal gemietet wurde?
Bin, wie immer, dankbar für Hilfen ;)

LG: Baerlie
 
Werbung:
vielleicht zeigst Du einfach mal, was Du an Tabellen und Daten hast, was du schon versucht hast und was bei rauskommen soll.
 
Also:
Ich habe eine Tabelle Maschinen_Typen (id, name, mietpreis)
Ich habe eine Tabelle Maschinen (id, typ references maschinen_typen(id))
Ich habe eine Tabelle Vermietungen (id, mietzeit, maschine references maschinen(id))

Was ich eigentlich möchte:
Eine Trigger-Procedure, welche mir bei einem "Error" ausgibt, ab wann eine Maschine dieses Typs wieder mietbar sein wird (für über 2 stunden)

EDIT1: vl. auch ein wenig nachhilfe beim thema if abfragen in trigger-proceduren

EDIT2: Die Trigger-Procedure läuft natürlich auf der Tabelle Vermietungen

EDIT3: Habe schonmal probiert, das ganze mit einer IF-Abfrage in der Triggerprocedure, aber da hat sie mir, selbst wenn ich erst morgen die Miete beantragen würde, den Wert von gestern ausgespuckt. ich denke, einfach ein falsches select geschrieben. (habe den Code nichtmehr)
 
Zuletzt bearbeitet:
Ich sehe keine Notwendigkeit für einen TRIGGER.

Code:
test=# create table maschinen_typen(id int primary key, name text, mietpreis int);
CREATE TABLE
test=*# create table maschinen(id int primary key, typ int references maschinen_typen);
CREATE TABLE
test=*# create table vermietungen (id int primary key, mietzeit daterange, maschine int references maschinen, exclude using gist (maschine with =, mietzeit with &&));
CREATE TABLE
test=*# insert into maschinen_typen values (1, 'Maschine 1', 10);
INSERT 0 1
test=*# insert into maschinen_typen values (2, 'Maschine 2', 20);
INSERT 0 1
test=*# insert into maschinen values (1, 1);
INSERT 0 1
test=*# commit;
COMMIT
test=# insert into vermietungen values (1, '[2019-06-09,2019-06-12)'::daterange, 1);
INSERT 0 1
test=*# insert into vermietungen values (2, '[2019-06-10,2019-06-13)'::daterange, 1);
FEHLER:  kollidierender Schlüsselwert verletzt Exclusion-Constraint »vermietungen_maschine_mietzeit_excl«
DETAIL:  Schlüssel (maschine, mietzeit)=(1, [2019-06-10,2019-06-13)) kollidiert mit vorhandenem Schlüssel (maschine, mietzeit)=(1, [2019-06-09,2019-06-12)).
test=*# select * from vermietungen where maschine = 1 and mietzeit && '[2019-06-10,2019-06-13)'::daterange;
 id |        mietzeit         | maschine
----+-------------------------+----------
  1 | [2019-06-09,2019-06-12) |        1
(1 row)

test=*#
 
ich will die Fehlermeldung ändern, auf den Zeitpunkt, wann sie wieder frei ist.

muss ich sowas im php programmieren? oder geht das auch Datenbank intern, damit ich last Error anzeigen kann?
 
Werbung:
Zurück
Oben