Bevor auf Grund einer Aktion das UPDATE, DELETE oder INSERT in der
Datenbank durchgeführt wird, ist es manchmal nützlich einen oder mehrere
zusätzliche Queries davorzuschalten. Dadurch können beispielsweise
bestimmte Werte zurückgesetzt oder aktualisiert werden. Im Array 'prequeries'
kann eine Liste solcher Queries abgelegt werden, wobei die Queries
als SQL-Strings vorliegen müssen. In den Queries können auch Platzhalter
verwendet werden, die sich auf die Attribute in 'required_attribs'
(siehe Abschnitt )
beziehen. Zusätzlich sind Platzhalter möglich, die ein Ergebnisattribut
eines vorhergegangenen Query aus 'prequeries' referenzieren. Hat der
vorhergegangene ``Prequery'' mehrere Ergebnistupel geliefert,
werden für die Ersetzungen der Platzhalter die Werte des ersten Tupels
verwendet.
Das folgende Beispiel zeigt eine Tabelle der zu einer Klausur angemeldeten Studenten. Aus der Tabelle können Studenten gelöscht werden. Bevor die Löschung in der DB endgültig durchgeführt wird, werden die in 'prequeries' angegebenen Anfragen durchgeführt. Dabei wird der Feld 'anzahlanmeldungen' in der Relation 'klausur' neu berechnet.
tabellenid => "student_schreibt_klausr",
leittabelle => "student_schreibt_klausur",
required_attribs => array(
vorlesungnummer => 10,
klausurnummer => 1,
),
anzeige => array (
aktionen=>array(loeschen=>1),
query=>array(
array(
SELECT=>"s.vorname, s.name, s.matrikelnummer",
FROM=>"student_schreibt_klausur ssk, student s",
WHERE=>"s.studentnummer=ssk.studentnummer",
),
),
),
loeschen => array (
prequeries => array (
"SELECT count(studentnummer)-1 as anzahl_neu
FROM student_schreibt_klausur
WHERE vorlesungnummer='$(vorlesungnummer)'
AND klausurnummer='$(klausurnummer)' ",
"UPDATE klausur
SET anzahlanmeldungen='$(anzahl_neu)'
WHERE vorlesungnummer='$(vorlesungnummer)'
AND klausurnummer='$(klausurnummer)'",
),
),
);
modul_tabelle_list($modul_param);