Hauptmenü

Untermenü

Advanced SQL - Praxistutorial 1 - Login

1. Die Abschnitte

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