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 »

Wieso in die Ferne schweifen... ;-)

Gruß und N8,

Philipp
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Zur zweiten Frage:

so wie ich das sehe, gibt's (theoretisch) vier Lösungen:
  1. du schreibst die Platzierungen vor der Ausgabe in die Datenbank, musst eben aufpassen, dass die jedesmal bei Änderung mit aktualisiert wird
  2. du machst das gleiche, nur jedesmal über 'ne temporäre Tabelle als Zwischenspeicher
  3. du lässt dir die Daten von MySQL nach Plätzen sortiert ausgeben, baust dir dann in PHP ein Array auf, fügst die Platznummer hinzu und sortierst dann ggf. das Array nach Benutzerwünschen um
  4. du versuchst es mit 'ner komplexeren Abfrage (die Platzierung entspricht dabei der Zahl der Datensätze mit größerer Punktezahl oder mit gleicher Punktezahl und gleichzeitig größerer Differenz + 1). Da wirst du evtl. noch ein Problem bei gleichplazierten bekommen, außerdem könnte MySQL damit überfordert sein...
Gruß, Philipp
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag von Condor »

Hi,
Lösung 3 hört sich gut an. Genauso habe ich es versucht, doch vergebens. Ich habe das mal ausprobiert, doch dann stand bei jeder Mannschaft der 13 Platz, da ich 13 Datensätze habe. Daher weiss ich nicht wie ich das lösen kann. Hast du vielleicht einen anhaltspunkt. Theoretisch funktioniert alles wunderbar, aber praktisch funktioniert nix.
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Ich würde in zwei Teilen vorgehen:
- zuerst das Auslesen aus der Datenbank
- und wenn das klappt (Testen!) an die Sortierung gehen.

Wenn du fit in Englisch bist, schau mal hier rein:
http://www.php.net/manual/en/function.arsort.php

Da scheint einer schon ein ähnliches Problem gehabt zu haben...

Gruß, Philipp

BTW: Wenn's am ersten Teil noch hapert, bitte nochmals melden
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag von Condor »

Hi,
das auslesen aus der DB und das Sortieren klappt wunderbar, ohne Probleme. Aber das das Script dann den jeweiligen Platz vor die Mannschaft schreibt klappt noch nicht. Wie gesagt, dann habe ich bei jeder Mannschaft den selben Platz. Ich werde mir mal jetzt den Link vornehmen, welchen du mir gepostet hast. Danke das du überhaupt deine Hilfe anbietest. Ist ja auch nicht selbstverständlich.
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag von Condor »

Hallo,
so wie ich das sehe, gehts da um arrays. Aber meine komplette Tabelle ist in einer MySQL-DB. Da gibts ja auch arrays, aber da funktioniert das doch anders oder ? Meine Tabelle hat 6 Spalten: Platz, Team, Spiele, Punkte, Gtore, Btore und Tordiff. Wenn dir das was hilft.
Benutzeravatar
Gonzo_w
Mitglied
Beiträge: 58
Registriert: 15.10.2002 16:02
Wohnort: Wien
Kontaktdaten:

Beitrag von Gonzo_w »

Also was ich da jetzt so mitbekommen habe, funzt alles bis auf die Ausgabe der Platzierung oder wie?

Versuch mal folgendes:
1. Vor die WHILE-Schleife setzt du $platz=1
2. Du inkrementierst $platz erst am Ende der WHILE-Schleife

Wenn ich dein Problem richtig verstanden habe, sollte das evtl. die Lösung sein. Hatte mal so ein ähnliches Problem, da hat das geholfen (bin aber noch Anfänger)!
Wer nicht wettet, hat schon verloren .... www.bet-austria.com
Die österreichische phpBB Usergruppe!
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Hi Condor,

nochmals zur Vorgehensweise:
1. Zuerst erstellst du die Abfrage auf die MySQL-Datenbank. Die Daten lässt du dir da so sortiert ausgeben, dass du die Platznummern von eins aufsteigend vergeben kannst.
2. Aus den Daten der MySQL-Datenbank baust du dann ein PHP-Array auf (ähnlich dem in dem Artikel auf php.net beschriebenen). Dabei vergibst du auch gleich auch die Platznummern (siehe Beitrag von Gonzo_w).
3. Anschließend sortierst die Daten nach Wunsch wie im Artikel beschrieben.

Gruß, Philipp
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag von Condor »

Hallo,
ich danke euch sehr für eure Hilfe, aber ich glaube ich vergesse die ganze Geschichte am besten. Ich bekomme es einfach nicht hin. Das was Gonzo da geschrieben hat, habe ich die ganze Zeit schon versucht. Dann steht in der DB bei jeder Mannschaft Platz 1.
@PhilipK: Punkt 1 funktioniert ja schon, Punkt 3 ist ja auch kein Problem, aber Punkt 2 kann ich irgendwie nicht realisieren. Ich weiss auch nicht wie das Array dann aussehen soll und den Artikel habe ich auch nur teils verstanden.
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

So mal einfach runtergeschrieben:

Code: Alles auswählen

$result = mysql_query("SELECT * FROM $table ORDER by punkte DESC, tordiff DESC", $conn);

$table = array();
$i = 0;

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  $table[$i]['team'] = $row['team'];
  [...] (andere Felder)
  $i++;
}
Damit hast du das Array, der erste Zähler entspricht dem Platz minus 1.

Wenn du so weit bist, kannst du dich nochmals melden, wenn es mit dem sortieren nicht klappen sollte.

Gruß, Philipp
Antworten

Zurück zu „Coding & Technik“