Advanced SQL - Praxistutorial 3 - Tauschangebote annehmen Teil 3
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. Und jetzt der Rest
So, bis hierhin haben wir bereits die Angebote gelöscht. Sicher ist sicher. Als nächstes werden dann alle notwendigen Querries in einem Array zusammengefasst. Solltet ihr ja mittlerweile kennen.
if (!$offerinfo || !$num) {
...
}
else {
foreach($offerinfo as $value) {
if ($value['typ'] == 'offer') {
$gilde = $value['gildean'];
}
else if ($value['typ'] == 'demand') {
$gilde = $value['gildevon'];
}
$querries[] = 'UPDATE
mitglied
SET
gilde = '.$gilde.'
WHERE id = '.$value['mitglied'];
}
if ($offerinfo[0]['preis']) {
$querries[] = 'UPDATE
gilde
SET
einnahmen = einnahmen + '.$offerinfo[0]['preis'].'
WHERE id = '.$offerinfo[0]['gildean'];
$querries[] = 'UPDATE
gilde
SET
einnahmen = einnahmen - '.$offerinfo[0]['preis'].'
WHERE id = '.$offerinfo[0]['gildevon'];
}
if (!empty($querries)) {
$this -> db -> transact($querries);
}
}
Erläuterung
In der foreach
-Schleife (hätte auch ein for
getan) werden den einzelnen Spielern die neuen Gilden-IDs zugewiesen. Die Unterscheidung
erfolgt einfach über den Typ, also demand
oder offer
. Außerhalb besagter Schleife wird dann der zusätzliche Goldbetrag abgerechnet, falls
vorhanden. Eine besondere Unterscheidung benötigt man nicht, da ein Angebot immer einen Plus- und eine Forderung immer einen Minus-Betrag hat. Und wer sich jetzt
fragt, ob das so stimmt, der/die sollte noch mal die eigenen Mathe-Grundkenntnisse aus der Grundschule auffrischen.
3. Etwas fehlt noch
Genau, und zwar alle anderen Angebote gleich welcher Art, die einen der betroffenen Spieler betrifft. Da muss nur außerhalb der for
-Schleife ein
einziger Query auf die Datenbank losgelassen werden. Zu Guter letzt werden dann die möglichen Fehlermeldungen zurückgegeben und das war es auch schon. Zur
Überprüfung klickt einfach auf den Link "Übersicht" und schaut euch das Ergebnis an. Wer einen Fehler findet, sollte mir
Bescheid sagen.
$query = 'DELETE
a
FROM
angebot a
LEFT JOIN
tausch t ON (t.angebot = a.id)
WHERE a.fuer IN ('.implode(',',$players).')
OR t.mitglied IN ('.implode(',',$players).')';
$this -> db -> change($query);
return $error;
4. Fazit
In diesem Tutorial ging es, wie ihr sicher gemerkt habt, nicht um großartige SQL-Techniken, sondern vor allem um den teil der Datenbankintegrität, um den ihr euch selber kümmern müsst. Ich hoffe, ihr habt was daraus gelernt.