Mehrdimensionale Arrays



  • Ich will aus einer Datenbank eine Rangliste erstellen. Dort habe ich dann ein paar Einträge:
    ID, Name, Kat1, Kat2, Kat3

    Nun erstelle ich eine mehrdimensionale Array, um dort die Werte reinzuschreiben und dann zu sortieren:

    // Leere Array erstellen
    $ranking = array(
    "id" => array (),
    "name" => array (),
    "Kat1" => array (),
    "Kat2" => array (),
    "Kat3" => array (),
    "Gesamtbewertung" => array()
    );
    
    // Mit DB verbinden, Werte holen
    ...
    // Werte einlesen
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
    $gesamtbewertung = $row["Kat1"] + $row["Kat2"] + $row["Kat3"];
    array_push($ranking, $row["id"], $row["name"], $row["Kat1"], $row["Kat2"], $row["Kat3"], $gesamtbewertung);
    }
    
    // Array sortieren - in diesem Fall nach der Gesamtbewertung
    array_multisort ($ranking["Gesamtbewertung"], SORT_DESC, SORT_NUMERIC);
    
    // Array nun sortiert in Tabelle ausgeben
    $count = 0;
    while ($count < 100)
    {
    echo("<tr><td>" . $ranking["name"][$count] . "</a></td><td>" . $ranking["Gesamtbewertung"][$count] . "</td><tr>");
    $count++;
    }
    

    So, was mach ich nun falsch, irgendwie funktioniert das nicht so recht 😕



  • Wie soll denn das Array nachher aussehen? Dein Code ist da nämlich imho nicht ganz richtig! Um dir sagen zu können, wie es richtig heißen muss, musst du erst sagen, wie du dir das ganze vorstellst!

    PS: Warum machst du das sortieren nicht gleich im SQL und sparst dir den ganzen Umweg über das zusätzliche Array 😕



  • Na wie gesagt, ich will nach den einzelnen Kategorien oder nach der Gesamtwertung sortieren lassen, dies kann der Benutzer natürlich festlegen, wonach er sortieren will. Ich habe mir gedacht, alles erstmal in eine Array einzulesen und diese dann nach dem entsprechenden Element zu sortieren. Das habe ich auch mit dem Beispiel versucht. Ich wüsste jetzt aber nicht, wie man dies direkt mit MySQL umsetzten könnte, vor allem bei der Gesamtwertung wird es ja kritisch, da dies ja keine DB-Element ist, sondern immer zusammengerechnet werden muß.


  • Mod

    schau dir die MySQL Doku an, die sagt dir alles.

    immer erstmal in die doku sehen!!
    und immer wenn du das result eines querys in ein array einliest, hast du in 99% der faelle mist gebaut.



  • Ich weiß ja schon, wie ich mit MySQL nach bestimmten Elementen sortiere, aber wie soll das z.B. bei der Gesamtbewertung funzen ?

    SELECT * FROM table ORDER BY (Kat1 + Kat2 + Kat3) DESC;

    So ? Im MySQL-Doc habe ich keine Antwort darauf gefunden 😕



  • Probier's aus - es klappt nämlich
    Oder so: SELECT (Kat1 + Kat2 + Kat3) as summe FROM table ORDER BY summe DESC
    So hast du die summe auch gleich mit im ergebnis (als spalte)

    btw: nie! * vervenden, sondern immer! die einzelnen spalten aufzählen

    [ Dieser Beitrag wurde am 08.07.2003 um 15:17 Uhr von flenders editiert. ]


Anmelden zum Antworten