Hauptmenü

Untermenü

Advanced SQL - Praxistutorial 1 - Mitglied auf dem Marktplatz anzeigen

1. Die Abschnitte

2. Und noch mal

... greifen wir auf unser Schweizer Taschenmesser zurück, also dem View gildenuebersicht. Aber diesmal arbeiten wir zusätzlich mit zwei Joins. Denn auch das funktioniert wunderprächtig. Ach ja, welcher Code ab sofort wohin gehört, macht ihr mal schön selber. Das Prinzip müsstet ihr mittlerweile verinnerlicht haben. Sobald die Methode existiert, klickt auf den Link Marktplatz im oberen Menü.

3. Die Methode showPlayersOnMarket

Die Abfrage

Bei der folgenden Übersichtsliste wollen wir unter anderem den Besitzer und das, nennen wir es mal so, "Angebot" anzeigen. Aber leider gibt es da ein kleines Problem. Denn bei beiden handelt sich um Mitglieder. Schauen wir uns zunächst die Einträge in der Tabelle markt an.

Marktplatz-Einträge

So, wir haben zwei IDs (besitzer und mitglied) zu denen wir gerne die dazu gehörigen Namen in Erfahrung bringen möchten. Und darum arbeiten wir mit einem doppelten Join auf unseren View gildenuebersicht.


public function showPlayersOnMarket() {
  $query 'SELECT 
              g1.mitglied AS besitzer,
              g2.mitglied AS mitglied,
              g1.gilde,
              m1.preis
            FROM
              markt m1
            LEFT JOIN
              gildenuebersicht g1 ON g1.mid = m1.besitzer 
            LEFT JOIN
              gildenuebersicht g2 ON g2.mid = m1.mitglied';  
  $result $this -> db -> selectMultiple($query);
}

Erläuterung

Schaut euch zunächst den ersten LEFT JOIN an. Dort wird die Mitglieds-ID mit der Spalte besitzer der Tabelle markt verknüpft (g1 ON g1.mid = m1.besitzer). Und beim zweiten Join wird dasselbe mit der Spalte mitglied gemacht (g2 ON g2.mid = m1.mitglied). Damit wir in PHP die zwei gleichnamigen Spalten mitglied aus dem View unterscheiden können, arbeiten wir jeweils mit einem AS.


SELECT 
  g1.mitglied AS besitzer,
  g2.mitglied AS mitglied,
  ...

Merke

  • Man kann bei Views zusätzlich mit Joins auf andere Tabellen arbeiten.
  • Bei Joins kann man mehrmals auf ein und dieselbe Tabelle zugreifen und trotzdem unterschiedliche Ergebnisse bekommen.

4. Die Ausgabe

... ist ein Mäusefurz. Darum äußere ich mich auch sehr knapp dazu. Zuerst Tabellenkopf erzeugen, dann das Ergebnis der Abfrage durchlaufen und anhängen, zum Schluss Tabellenende plus zusätzlichen Link erzeugen und fertig. Letzterer wird übrigens für den nächsten Abschnitt benötigt.


$html   '<table cellspacing="0" cellpadding="0">
            <tr>
              <th>Gilde</th>
              <th>Besitzer</th>
              <th>Angebot</th>
              <th>Preis</th>                    
            </tr>';
for ($i 0$i count($result); $i++) {
  $html .= '<tr>
              <td>'.$result[$i]['gilde'].'</td>
              <td>'.$result[$i]['besitzer'].'</td>
              <td>'.$result[$i]['mitglied'].'</td>
              <td>'.$result[$i]['preis'].'</td>                    
            </tr>';
}
$html .= '</table>
          <p>
            <a href="index.php?do=sell">
              Spieler auf dem Marktplatz anbieten
            </a>
          </p>';
return $html;

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt