Advanced SQL - Praxistutorial 1 - Mitglied auf dem Marktplatz anzeigen
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. 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.
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