Ihre Pizza-Wünsche

Gewünschte Größe
Belag
Gouda (0.78)Mozarella (1.29)
Pilze (0.29)Salami (0.59)
Tomaten (0.25)
Kombisuche

GrößeBelagPreis

|<<>>|0 / 01


Erläuterungen

Diese Seite bietet im oberen Teil die Möglichkeit, mehrere Pizzas zu belegen und in den eigenen Warenkorb einzutragen. Unten werden über eine Abfrage die Bestellungen zu dieser Bestell-Id angezeigt.

Die Eingabemaske nutzt zusätzlich das folgende sd:ro-value-Element:

<sd:ro-value sd:for="sample-input" 
    sd:col="pizza_online_bestellenId" 
    sd:new-value="$myId" 
    sd:std-value="pizza_online_bestellenId" />
Damit wird bei der Neuerstellung einer Zeile die Zelle für den Fremdschlüssel mit der gecachten ID des aktuellen Nutzers vorbelegt. Beim Bearbeiten bleibt der aktuelle Wert erhalten. Ferner nutzt der Button das Attribut
sd:only-save="true"
so daß keine Suchfunktion eingeblendet ist und ein Klick auf den Button immer als Speichern interpretiert wird.

Die Ausgabe basiert auf der folgenden Sql-Abfrage:

Declare @i int

Select A.pizza_listeId,
Case A.pizzagrösse
    When 1 Then 'klein'
    When 2 Then 'mittel' 
    When 4 Then 'gross' End As pizzagrösse, 
_bf_pizzabelag(A.pizzabelag) As pizzabelag, X.zP

From pizza_liste As A Inner Join
    (Select B.pizza_listeId, 
    Sum(B.pizzagrösse * C.preis) As zP 
    From pizza_liste As B Inner Join pizzabelag As C 
    On B.pizzabelag & C.pizzabelagId <> 0
    Where B.pizza_online_bestellenId = @i 
    Group By B.pizza_listeId
) As X
On A.pizza_listeId = X.pizza_listeId
Where A.pizza_online_bestellenId = @i
Die Abfrage verknüpft die Tabelle mit den Pizza-Bestellungen mit einer Unterabfrage, welche zu jeder Zeile dieser Bestellung die Einzelkosten (B.pizzagröße * C.preis) ermittelt und über diese addiert. Die Funktion _bf_pizzabelag wird zur Randtabelle 'pizzabelag' automatisch erstellt, da diese Tabelle als bitSet-Tabelle deklariert ist. Zusätzlich verwendet die Spalte pizza_liste.pizzabelag den Datentyp bitSet und eine Relation auf die Tabelle 'pizzabelag'. Die einzelnen Zeilen dieser Tabelle werden zum Anhaken ausgegeben. Die Funktion _bf_pizzabelag wandelt den Kombinationswert um in eine kommagetrennte Liste der entsprechenden Zeilen.

Die Abfrage wird über das sd:with-param-Element initialisiert:

<sd:rs sd:name="sample-output" sd:edit="sample-input"
    sd:source-type="query" sd:save-only-visible="true"
    sd:source-table="pizza_liste" sd:source-name="query_pizza_liste">

    <sd:with-param sd:sql-param="@i" sd:std-value="$myId" />
    <sd:normal>

        ...

        <sd:del-link>Löschen</sd:del-link>

    </sd:normal>

</sd:rs>
Das sd:save-only-visible - Attribut stellt sicher, daß nur Zeilen gelöscht werden, welche auch angezeigt werden, also dem aktuellen Nutzer gehören.

Zur Pizza-Bestellung
Zurück zur Startseite