Seite 4 von 5
Verfasst: 17.01.2003 00:15
von PhilippK
Das mit dem in die Tabelle schreiben läuft ungefähr so ab:
Code: Alles auswählen
SELECT * FROM table ORDER by punkte DESC, tordiff DESC
Nun bekommst du die richtig sortierte Tabelle ausgegeben. Wichtig ist, dass die Tabelle einen Primärschlüssel (z.B. id) und ein Feld für den Platz (z.B. platz).
Nun gehst du die komplette Ausgabe der SELECT-Abfrage Datensatzweise durch, wie du es jetzt ja schon mit der While-Schleife machst. Dabei setzt du vor der Schleife eine Zählervariable auf 1
und erhöst die am Ende der Schleife (innerhalb der Schleife) um 1
.
Wenn du jetzt z.B. den dritten Datensatz verarbeitest, hast du einen Wert für die Zählervariable $i (3) sowie die ID des Datensatzes ($row['id'], gehen wir von 32 aus).
Nun führst du folgenden SQL-Befehl aus:
Dann solltest du die richtigen Platzzahlen in der Datenbank haben.
Gruß, Philipp
Verfasst: 17.01.2003 01:59
von Condor
HI,
die ersten 3 Schritte habe ich schon soweit, aber das mit dem Update in der DB, verstehe ich nicht ganz. Den Befehl selber verstehe ich schon. Ich habe eine Spalte Platz und ID. Aber woher weiss ich denn jetzt, das Datensatz nr. 32 den 3 Platz bekommt ?
Verfasst: 17.01.2003 08:16
von PhilippK
Condor hat geschrieben:HI,
die ersten 3 Schritte habe ich schon soweit, aber das mit dem Update in der DB, verstehe ich nicht ganz. Den Befehl selber verstehe ich schon. Ich habe eine Spalte Platz und ID. Aber woher weiss ich denn jetzt, das Datensatz nr. 32 den 3 Platz bekommt ?
Weil dir der Datensatz mit id = 32 bei der Sortierungsabfrage als dritter Datensatz zurückgegeben wurde. Die erste SQL-Abfrage dient nur der Platzvergabe, die Abfrage sollte also die Tabelle genau in der Reihenfolge ausgeben, wie die Plätze zu vergeben sind.
Gruß, Philipp
Verfasst: 17.01.2003 15:57
von Pyramide
Und bei zwei Teams mit gleicher Punktzahl sieht das dann so aus:
Code: Alles auswählen
$sql = "SELECT team_id, punkte FROM tabelle ORDER BY punkte desc";
$result = mysql_query($sql);
$platz_zaehler = 0;
$voriger_platz = 0;
$vorige_punkte = 0;
while($row = mysql_fetch_array($result))
{
$platz_zaehler++;
if($row['punkte'] == $vorige_punkte) //wenn das aktuelle Team die gleiche Punktzahl wie das vorige hat
$platz_in_db = $voriger_platz; //den vorigen platz verwenden
else
$platz_in_db = $voriger_platz = $platz_zaehler; //ansonsten die zählervariable verwenden
$update_sql = "UPDATE tabelle SET platz=$platz_in_db WHERE team_id=$row[team_id]";
}
Verfasst: 17.01.2003 17:31
von Condor
Hallo,
damit mans besser versteht, hier meine Tabellen.
Die MySQL-DB selbst sieht so aus:
Code: Alles auswählen
| id | platz | team | Spiele | Punkte | Gtore | Btore | Tordiff |
------------------------------------------------------------------------
| 1 | | Argentinien | 20 | 21 | 21 | 12 | 9 |
| 2 | | Polen | 20 | 23 | 34 | 20 | 14 |
| 3 | | Deutschland | 20 | 23 | 33 | 18 | 15 |
| 4 | | Oberhausen | 20 | 12 | 12 | 24 | -12 |
| 5 | | Brasilien | 20 | 25 | 23 | 12 | 11 |
| 6 | | Inter Mail. | 20 | 23 | 30 | 19 | 11 |
| 7 | | Ungarn | 20 | 19 | 19 | 5 | 14 |
| 8 | | Schweiz | 20 | 12 | 12 | 21 | - 9 |
| 9 | | Ajax | 20 | 34 | 33 | 16 | 17 |
| 10 | | Italien | 20 | 35 | 33 | 15 | 18 |
| 11 | | Leverkusen | 20 | 29 | 19 | 24 | - 5 |
| 12 | | Burghausen | 20 | 18 | 18 | 32 | -14 |
| 13 | | Vitesse | 20 | 30 | 30 | 19 | 11 |
Und wenn das Script alles ausgegeben hat, sieht die Tabelle nach der Sortierung so aus:
Code: Alles auswählen
| Platz | Verein | Punkte | ET | GT | Diff |
----------------------------------------------
| | Italien | 35 | 33 | 15 | 18 |
| | Ajax | 34 | 33 | 16 | 17 |
| | Vitesse | 30 | 30 | 19 | 11 |
| | Leverkusen | 29 | 19 | 24 | - 5 |
| | Brasilien | 25 | 23 | 12 | 11 |
| | Deutschland| 23 | 33 | 18 | 15 |
| | Polen | 23 | 34 | 20 | 14 |
| | Inter Mail.| 23 | 30 | 19 | 11 |
| | Argentinien| 21 | 21 | 12 | 9 |
| | Ungarn | 19 | 19 | 5 | 14 |
| | Burghausen | 18 | 18 | 32 | -14 |
| | Schweiz | 12 | 12 | 21 | - 9 |
| | Oberhausen | 12 | 12 | 24 | -12 |
Verfasst: 17.01.2003 18:40
von Pyramide
Heißt das du hast das Problem gelöst oder was ist deine Frage?
Verfasst: 18.01.2003 11:17
von jasc
Passt jetzt zwar nicht so zum Thema, aber was ist das für eine Tabelle, wo Nationalmannschaften und Vereinsmannschaften zusammenspielen

Verfasst: 18.01.2003 11:21
von PhilippK
RAMses of JaSc hat geschrieben:Passt jetzt zwar nicht so zum Thema, aber was ist das für eine Tabelle, wo Nationalmannschaften und Vereinsmannschaften zusammenspielen

Füllst du ein Testsystem immer mit realen Namen?
Gruß, Philipp
Verfasst: 18.01.2003 11:25
von jasc
Achso, ich dachte, es gibt schon die richtige Tabelle. Aber wenn ich nicht gerade asdf und so eingebe, verwende ich normal schon "sinnvolle" Dinge, ich meine, was macht es für einen Unterschied (vom Aufwand), ob ich Argentienien oder Dortmund eingebe

.
Aber naja, ist ja nicht so wichtig, hat mich nur gewundert.
Verfasst: 18.01.2003 11:29
von PhilippK
Vielleicht hat's ja auch 'nen Sinn...
Gruß, Philipp