next up previous contents index
Next: Der Eintrag cols im Up: DB-Table-Submodule Previous: Die Einträge der Arrays

Der Eintrag query im Detail

 Der Eintrag query steht in $anzeige, $aendern und $loeschen zur Verfügung. query ist selbst ein Array, das mehrere Anfragen enthalten kann. Jede Anfrage ist ein Eintrag in query. Die Anfragen werden vor der Ausführung des Query mit UNION ALL verknüpft. Die einzelnen Anfragen selbst sind wiederum als Arrays (mit Hashes) organisiert, wobei die einzelnen Bestandteile (Tabelle [*]) den Sprachelementen von SQL entsprechen. Die Bestandteile werden vor der Ausführung des Query in einen SQL-String umgewandelt. Der Syntax entspricht dem von SQL.


 
Tabelle:  Bestandteile eines Query-Arrays
english Bestandteil german english Beschreibung german english Standardwert german
english SELECT german english String, der die für die Projektion vorgesehenen Attribute (durch Kommas getrennt) enthält. german english Leittabelle definiert: leittabelle.* sonst: * german
english FROM german english String, der die zu verwendenden Relationen (durch Kommas getrennt) enthält. german english Leittabelle definiert: leittabelle sonst: Fehler german
english WHERE german english String, der die Selektionen (durch Kommas getrennt) enthält german english $requierd_attribs, falls definiert german
english GROUP german english String, der die Attribute (durch Kommas getrennt) enthält, nach denen gruppiert werden soll. german  
english ORDER german english String, der die Attribute (durch Kommas getrennt) enthält, nach denen sortiert werden soll. german  
english REST german english String, der beim Umwandeln in den SQL-String am Ende angefügt wird. Hierin können weitere SQL-Sprachelemente aufgenommen werden, falls nötig. german  
english WHERE_EXT german english Array, das Informationen für die Gestaltung der Benutzer-Suche enthält. Steht nur in $anzeige zur Verfügung. german  

Das Beispiel aus [*] könnte man so erweitern dass, zusätzlich zur Tutornummer auch der Name des Tutors angezeigt wird.

Da sowohl ein Mitarbeiter, als auch ein Student als Tutor für eine Übungsgruppe arbeiten kann, werden im query-Array zwei Teilanfragen formuliert. In der ersten wird ein Join mit der Relation 'mitarbeiter' vorgenommen, in der zweiten mit der Relation 'student'.

Im Zusammenhang mit Gruppierungen ist folgendes zu beachten: Normalerweise werden die einzelnen Ergebnistupel des Query durch die Primärschlüssel der Leittabelle gekennzeichnet. Wird beispielsweise die Aktion Ändern ausgelöst, kann das zu ändernde Tupel von der Anwendung durch den gespeicherten Primärschlüssel identifiziert werden. Da bei einer Gruppierung unter Umständen auch der Primärschlüssel einbezogen wird, wird hier ein anderer Mechanismus zur Identifizierung der einzelnen Tupel verwendet. Die Anwendung merkt sich die einzelnen Ergebnistuppel an Hand der Attribute der Leittabelle, nach denen gruppiert wurde. Das folgende Beispiel soll das Ändern der Mailadressen eines Student ermöglichen. Da ein Student mehrere Mailadressen haben kann, wird in der Haupttabelle nach den Mailadressen gruppiert. Dabei kommt es auf das Attribut 'm.studentnummer' an. An Hand dieses Attributs weiß die Anwendung, welche Mailadressen geändert werden sollen.

Die Workflow-Anwendung bietet über ein Formular dem Benutzer die Möglichkeit die unter Umständen sehr umfangreiche Ergebnismenge besser zu beherrschen. Er kann über dieses Formular nach bestimmten Ergebnistupeln suchen oder die Ausgabe entsprechend einschränken. Dabei stehen als Operatoren <, <=, >=, >, =, <> und das aus SQL bekannte LIKE (mit den Wildcards '%' und '_') zur Verfügung. Darüberhinaus kann der Benutzer die Sortierreihenfolge beeinflussen, indem er die Reihenfolge der Sortierkriterien vorgibt und für die einzelnen Kriterien auf- oder absteigende Sortierung auswählt.

Der Modulprogrammierer kann über das Array WHERE_EXT die Such- und Sortiermöglichkeiten aktivieren und beeinflussen. Das Array WHERE_EXT verwendet folgende Schlüssel:

Die Funktion cmp(tupelvar.attributname) ist gleichbedeutend mit dem String 'tupelvar.attributname $(op_aliasname) $(aliasname)'. $(op_aliasname) und $(aliasname) wird zur Laufzeit durch den vom Anwender ausgewählten Operator bzw. durch das vom Anwender eingegebenen Suchkriterium ersetzt. Der Modulprogrammierer kann statt cmp(...) einen entsprechenden String auch direkt eingeben. Denkbar wären folgende Varianten:

(tupelvar, attributname, aliasname etc. sind natürlich durch konkrete Werte zu ersetzen.)

Im folgenden ein kurzes Beispiel, das das Suchen in der Relation student nach Vor- und Nachname ermöglicht:

Da für das Attribut 'name' der Alias 'nachname' im SELECT-Teil verwendet wurde, muss dies im WHERE_EXT-Teil entsprechend berücksichtigt werden.


next up previous contents index
Next: Der Eintrag cols im Up: DB-Table-Submodule Previous: Die Einträge der Arrays
Copyright Munich Network Management Team