Hier könnte Ihr eigenes Online-Quiz notiert sein.
Zunächst wird eine Tabelle mit lauter int-Spalten definiert. Diese erhalten als
einfache Relationen (1;1996;2;1997;3;1998;4;1999) die möglichen Antworten.
Die wesentlichen Teile der Ausgabeseite basieren auf dem Subtyp 'Start nur mit Eingabe', so daß die Abfrage zunächst durch das <sd:ignore>-Element ausgeblendet wird. Der Button wird um sd:only-save='true' ergänzt, das sd:as-radio-Attribut wurde per Hand hinzugefügt.
<table>
<sd:input-table sd:name="sample-input" sd:table="onlinequiz"
sd:cached-id="onlinequizId" sd:rel-format="auto">
<tr>
<td style="width:400px">
<sd:label sd:col="begruender" />
</td>
<td style="width:400px">
<sd:input-text sd:col="begruender" />
</td>
</tr>
<tr>
<td>
<sd:label sd:col="xml_start" />
</td>
<td>
<sd:input-text sd:col="xml_start"
sd:as-radio="true" />
</td>
</tr>
<tr>
<td>
<sd:label sd:col="xls_definition" />
</td>
<td>
<sd:input-text sd:col="xls_definition" />
</td>
</tr>
<tr>
<td>
<sd:label sd:col="sql_verwendung" />
</td>
<td>
<sd:input-text sd:col="sql_verwendung" />
</td>
</tr>
</sd:input-table>
</table>
<p />
...
<sd:ignore sd:ignore-type="0 new">
Ihr Ergebnis:
<sd:rs sd:name="sample-output"
sd:source-type="query" sd:source-name="onlinequiz_auswertung">
<sd:with-param sd:sql-param="@i"
sd:std-value="$onlinequizId" />
<sd:normal>
<sd:cell-value sd:col="Score" />
</sd:normal>
</sd:rs> von maximal 4 Punkten.<p/>
Der derzeitige Höchststand beträgt
<sd:rs sd:name="high-score" sd:source-type="query"
sd:source-name="onlinequiz_highscore">
<sd:normal>
<span style='background-color:red;'>
<sd:cell-value sd:col="maxScore" />
</span>
</sd:normal>
</sd:rs>
</sd:ignore>
Dieses Beispiel verdeutlicht, daß das Ergebnis einer Abfrage auch beliebig in Text eingebettet werden kann.
Zusätzlich wird das sd:cached-id-Attribut genutzt, um die Id der vom Leser gespeicherten Zeile zu cachen, sie dem sd:with-param-Element zu übergeben und mit ihr die Abfrage auszuführen. Diese verwendet den folgenden Sql-Befehl:
Declare @i int
Select
Case A.begruender When 3 Then 1 Else 0 End +
Case A.xml_start When 3 Then 1 Else 0 End +
Case A.xls_definition When 2 Then 1 Else 0 End +
Case A.sql_verwendung When 4 Then 1 Else 0 End
As Score
From onlinequiz As A Where A.onlinequizId = @i
So sieht man natürlich die korrekten Antworten.
Die 'onlinequiz_highscore' - Abfrage bildet das Maximum über alle gefundenen Einträge und liefert den Spitzenreiter:
Select Max(
Case A.begruender When 3 Then 1 Else 0 End +
Case A.xml_start When 3 Then 1 Else 0 End +
Case A.xls_definition When 2 Then 1 Else 0 End +
Case A.sql_verwendung When 4 Then 1 Else 0 End
)
As maxScore From onlinequiz As A
Es handelt sich also um eine aggregierende Abfrage, deren Zeilen nicht durch eine Where-Bedingung eingeschränkt sind.
Man sieht: Es genügen geeignete Tabellendefinitionen, Sql-Abfragen mit Parametern sowie die deklarative Erstellung von Ausgabeseiten, um eine solche Funktionalität anbieten zu können.