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);