Advanced SQL - Praxistutorial 3 - Tauschangebote annehmen 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. Was müssen wir berücksichtigen?
Nun, eine ganze Menge. Denn es kann eine Menge Überkreuzangebote geben, die natürlich nicht alle angenommen werden können. Wenn ihr schon Angebote angenommen oder zurückgezogen habt, so spielt noch mal den Dump ein, denn der ist für so eine Situation ausgelegt. Wenn ihr jetzt mal nach "Wurzelsepp" sucht, so taucht der drei Mal auf, "Erni" zwei Mal und "Wackeldackel" ebenfalls drei Mal.
Wenn man jetzt also ein Angebot mit einem dieser Spieler annimmt, so müssen die anderen gelöscht werden. Aber nach welchem Prinzip geht man vor? Nun, wenn man mehrere sich überschneidende Angebote annimmt, so gilt die die alte Maxime
"Wer zuerst kommt, malt zuerst."
Wir arbeiten also einfach alle angekreuzten Angebote von oben nach unten ab. Außerdem haben wir immer noch das Problem, dass irgendjemand ein Angebot annimmt, dass eines von uns betrifft.
3. Die Vorgehensweise
Normalerweise arbeite ich in so einem heiklen Fall mit einem LOCK TABLE
. Allerdings benötigt man dafür entsprechende Rechte, die man nicht automatisch hat.
Darum zeige ich euch mal eine Möglichkeit, wie man das auch ohne machen kann. Ein wenig Gottvertrauen vorausgesetzt. Also halten wir uns noch mal alle Möglichkeiten
vor Auge.
- Ein Angebot, dass angenommen werden soll, existiert nicht mehr. Sei es nun, dass es zurückgezogen wurde oder einer der betroffenen Spieler bereits in einem anderen angenommenen Angebot auftauchte.
- Unser aktueller Gildenmeister (hier "Super Mario") versucht mehrere Angebote anzunehmen, bei denen es Überschneidungen gibt.
- Unser aktueller Gildenmeister (hier "Super Mario") versucht gleichzeitig mehrere Angebote anzunehmen oder zurückzuziehen, bei denen es Überschneidungen gibt.
3. Die Querries für die Annahme eines Angebots
Davon brauchen wir eine ganze Menge. Denn wir müssen folgende Aufgaben abarbeiten.
- Unsere Gilde den/die neuen Spieler zuweisen.
- Der anderen Gilde den/die neuen Spieler zuweisen.
- Ggf. das Guthaben beider Gilden auf den neuesten Stand bringen.
- Das Angebot löschen.
- Alle anderen Angebote löschen, die einen betroffenen Spieler beinhalten.
4. Die Umsetzung
Da gehen wir nach einem einfachen Prinzip. Zuerst holen wir uns alle notwendigen Informationen. Danach versuchen wir, die angenommenen Angebote zu plätten. Wenn das gelingt, hauen wir den Rest der benötigten SQL-Statements raus, um die übrigen Aufgaben zu erledigen.
5. Umstellung
Damit ihr das Prinzip des folgenden Codes auch seht, solltet ihr in der Methode transactSwapoffer
die Reihenfolge ändern. Und zwar so:
public function transactSwapoffer() {
...
if ($_POST['accept']) {
...
}
if ($_POST['cancel']) {
...
}
if ($_POST['decline']) {
...
}
...
}
Außerdem solltet ihr für dieses konkrete Beispiel in der Methode listSwapOffers
aus dem
ORDER BY a.id, t.typ DESC'
ein
ORDER BY a.id DESC, t.typ DESC'
machen.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt