Startseite

Testen Sie Ihre Sql/Xml-Kenntnisse

Hier könnte Ihr eigenes Online-Quiz notiert sein.

1996
1997
1998
1999

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.

Zurück zur Startseite