Advanced SQL - Praxistutorial 1 - Login
1. Die Abschnitte
- Vorwort
- Die Datenbank-Klasse
- Verbindungsaufbau
- Login
- Die grundsätzliche Vorgehensweise
- Die Übersichtsliste
- Mitglied auf dem Marktplatz anzeigen
- Mitglied anbieten Teil 1
- Mitglied anbieten Teil 2
- Direktangebot machen Teil 1
- Direktangebot machen Teil 2
- Tauschangebot machen Teil 1
- Tauschangebot machen Teil 2
- Tauschangebot machen Teil 3
2. Unser Schweizer Taschenmesser
Wir haben uns ja im letzten Einstiegstutorial einen View namens gildenuebersicht
angelegt. Und das werden wir nun exzessiv nutzen.
Ich hoffe aber, ihr seid euch über die Nachteile im Klaren, die ich schon von mir gegeben habe.
3. Die Methode getAllPlayers
Die Abfrage
Damit ihr mal im konkreten praktischen Einsatz seht, was man mit Views machen kann, bauen wir folgenden Query auf und holen uns die entsprechenden Daten.
public function getAllPlayers() {
$query = 'SELECT
gilde,
einnahmen,
mitglied,
gold,
wesen,
stufe
FROM
gildenuebersicht
ORDER BY
einnahmen DESC,
gold DESC,
gid ASC';
$result = $this -> db -> selectMultiple($query);
}
Erläuterung
Ein View ist bereits eine SQL-Abfrage, die uns Ergebnisse liefert. Die werden in einer Art von eigener Tabelle beim Aufruf angezeigt. Das könnt
ihr sehr gut sehen, wenn ihr im phpMyAdmin oder in HeidiSQL bei den Tabellen auf gildenuebersicht
klickt.
Und wenn man nun diesen View in einen eigenen Query aufruft, so kann man eh schon vorhandene Ergebnisse zusätzlich filtern. In diesem Fall holen wir uns für die Anzeige der Übersicht nur bestimmte Felder aus unseren View und sortieren sie zusätzlich noch. Praktisch, gelle? Wenn da nicht die Sache mit den hops-gegangenen Indizes wäre. Aber das wisst ihr ja schon.
4. Gruppenwechsel
Mit der folgenden "Herausforderung" haben sich schon ganze Generationen von Anfängern herumgeschlagen. Und da wir hier genau damit zu tun haben, zeige ich mal das Prinzip.
Das Problem
Wenn ihr euch mal das Ergebnis mit einem print_r($result);
ausgeben lasst, so seht ihr, dass wir bei den Gilden mehrfache Einträge haben.
Und zwar so viele, wie die jeweilige Gilde Mitglieder hat. Und wie sorgt man jetzt für eine saubere Ausgabe? Nun, dafür benötigt man eine Zwischensortierung.
Die Lösung
Wir wollen zunächst alle Gilden mit ihren Einnahmen und dann erst alle ihre Mitglieder anzeigen. Also wird einfach das bestehende result
neu aufgebaut in einem Array names gilde
. Ach, ja, für die Vollhonks unter euch, der folgende Code gehört unter das $result =
$this -> db -> selectMultiple($query);
.
for ($i = 0; $i < count($result); $i++) {
$gilde = $result[$i]['gilde'];
$gilden[$gilde]['einnahmen'] = $result[$i]['einnahmen'];
$gilden[$gilde]['mitglieder'][] = array(
$result[$i]['mitglied'],
$result[$i]['gold'],
$result[$i]['wesen'],
$result[$i]['stufe']
);
}
Erläuterung
Mit $gilde = $result[$i]['gilde'];
legen wir einen assoziativen Schlüssel für unser neues Array fest. Dann bauen wir uns zwei weitere
Unterkategorien auf. einnahmen
der Gilde (nur ein Wert), sowie mitglieder
, das auf Grund der Anzahl wiederum ein numerisches
Array ist.
5. Die Ausgabe
Schaut euch jetzt das neue Array mit einem print_r($gilden);
an. Dann seht ihr, dass wir eine saubere Struktur haben, die man ganz einfach
verarbeiten kann.
$html = '';
foreach ($gilden as $key => $value) {
$html .= '<div class="gilde">
<h2>'.$key.' ('.$gilden[$key]['einnahmen'].')</h2>
<h3>Mitglieder</h3>
<ul>';
for ($i = 0; $i < count($gilden[$key]['mitglieder']); $i++) {
$html .= '<li>'.$gilden[$key]['mitglieder'][$i][0].'<br />'.
$gilden[$key]['mitglieder'][$i][1].'<br />'.
$gilden[$key]['mitglieder'][$i][2].'<br />'.
$gilden[$key]['mitglieder'][$i][3].'</li>';
}
$html .= '</ul></div>';
}
return $html;
Erläuterung
Zunächst durchlaufen wir in der foreach
-Schleife die einzelnen Gilden. Und deren Name ist der erste Index des Arrays gilde
.
Wir packen also zuerst den Namen ($key
) und die Einnahmen ($gilden[$key]['einnahmen']
in den String $html
.
Danach werden alle Mitglieder einer Gilde samt ihrer zugehörigen Informationen in der for
-Schleife durchlaufen und ebenfalls an
$html
angehängt. Ich denke, das Prinzip eines Gruppenwechsels sollte hiermit klar sein. Wer trotz mehrmaligen Nachdenkens immer noch
schaut wie eine Kuh, wenn es donnert, dem empfehle ich, sich ein neues Hobby oder einen neuen Beruf zu suchen.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt