Hauptmenü

Untermenü

Advanced SQL - Praxistutorial 3 - Tauschangebote annehmen Teil 3

1. Die Abschnitte

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.

zurück zum vorherigen Abschnitt