Zahlen richtig sortieren

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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

Code: Alles auswählen

$i = 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:

Code: Alles auswählen

UPDATE table SET platz = 3
WHERE id = 32
Dann solltest du die richtigen Platzzahlen in der Datenbank haben.

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag 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 ?
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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]";
}
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag 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  |
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Heißt das du hast das Problem gelöst oder was ist deine Frage?
Benutzeravatar
jasc
Ehemaliges Teammitglied
Beiträge: 2497
Registriert: 24.05.2001 02:00
Wohnort: Hergensweiler bei Lindau/B

Beitrag von jasc »

Passt jetzt zwar nicht so zum Thema, aber was ist das für eine Tabelle, wo Nationalmannschaften und Vereinsmannschaften zusammenspielen :-?
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
Zuletzt geändert von PhilippK am 18.01.2003 11:27, insgesamt 1-mal geändert.
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
jasc
Ehemaliges Teammitglied
Beiträge: 2497
Registriert: 24.05.2001 02:00
Wohnort: Hergensweiler bei Lindau/B

Beitrag 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.
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Vielleicht hat's ja auch 'nen Sinn...

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Antworten

Zurück zu „Coding & Technik“