Advanced SQL - Praxistutorial 3 - Tauschangebote anzeigen Teil 1
1. Die Abschnitte
- Vorwort
- Übersicht
- Tauschangebote anzeigen Teil 1
- Tauschangebote anzeigen Teil 2
- Überlegungen
- Tauschangebote zurückziehen oder ablehnen
- Tauschangebote annehmen Teil 1
- Tauschangebote annehmen Teil 2
- Tauschangebote annehmen Teil 3
2. Die Abfrage
Da ihr durch unseren View wohl schon ein wenig aus der Übung gekommen seid, was Joinen angeht, so arbeiten wir diesmal nicht damit, sondern bauen
uns einen eigenen Query zusammen. Dazu legt ihr eine Methode names listSwapOffers
an und packt den folgenden Code hinein.
$query = 'SELECT
a.id,
a.von,
a.preis,
t.typ,
m1.name as offer,
m2.name as offerfrom,
m3.name as offerto,
s.stufe,
w.wesen,
c.gold,
m3.gilde
FROM
tausch t
INNER JOIN
angebot a ON (a.id = t.angebot)
INNER JOIN
mitglied m1 ON (m1.id = t.mitglied)
INNER JOIN
mitglied m2 ON (m2.id = a.von)
INNER JOIN
mitglied m3 ON (m3.id = a.an)
INNER JOIN
charakter c ON (c.id = m1.charakter)
INNER JOIN
stufe s ON (s.id = c.stufe)
INNER JOIN
wesen w ON (w.id = c.wesen)
WHERE m1.status = 1
AND (a.von = '.$_SESSION['login'].'
OR a.an = '.$_SESSION['login'].')
ORDER BY a.id, t.typ DESC';
3. Umpf
... werden jetzt wohl einige denken. Aber keine Angst, ist halb so wild. Außerdem solltet ihr das Prinzip ja bereits kennen. Zuerst werden natürlich die Tabellen
angebot
und tausch
verknüpft.
INNER JOIN
charakter c ON (c.id = m1.charakter)
INNER JOIN
stufe s ON (s.id = c.stufe)
INNER JOIN
wesen w ON (w.id = c.wesen)
Dann benötigen wir drei Spielernamen.
- der Name des zu handelnden Spielers =>
m1
- der Name des Anbieters =>
m2
- der Name des Angebotenen (blödes Wort) =>
m3
INNER JOIN
mitglied m1 ON (m1.id = t.mitglied)
INNER JOIN
mitglied m2 ON (m2.id = a.von)
INNER JOIN
mitglied m3 ON (m3.id = a.an)
Damit hätten wir schon drei weitere Joins erfasst. Anschließend holen wir uns zusätzliche Informationen des Spielers m1
, macht wieder drei Joins.
INNER JOIN
charakter c ON (c.id = m1.charakter)
INNER JOIN
stufe s ON (s.id = c.stufe)
INNER JOIN
wesen w ON (w.id = c.wesen)
Und zu guter Letzt kümmern wir uns um den Suchfilter.
WHERE m1.status = 1
AND (a.von = '.$_SESSION['login'].' OR a.an = '.$_SESSION['login'].')
ORDER BY a.id, t.typ DESC';
Der sorgt dafür, dass alle Tauschangebote aufgelistet werden, in der unser Gildenmeister involviert ist. Sei es nun als Anbieter oder Angebotener. Und das Ergebnis dröseln wir nun per PHP auf. Ach ja, ganz wichtig ist die primäre Sortierung über die Angebots-ID!
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt