Hauptmenü

Untermenü

Advanced SQL - Praxistutorial 3 - Tauschangebote annehmen Teil 1

1. Die Abschnitte

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.

3. Die Querries für die Annahme eines Angebots

Davon brauchen wir eine ganze Menge. Denn wir müssen folgende Aufgaben abarbeiten.

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.idt.typ DESC'

ein


ORDER BY a.id DESCt.typ DESC'

machen.

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