MySQL: Erst ein paar Spalten zusammenzählen, dann ordnen

  • Guten Abend

    Folgendes Problem:
    Ich habe folgende Datenbankstruktur:
    ID – NAME – GOLD – SILBER – BRONZE

    Jetzt will ich eine Tabelle darstellen, welcher am meisten Geld hat. Dazu muss ich aber erst Gold, Silber und Bronze zusammenzählen, bevor ich sie auswerten kann. Mit ORDER BY komme ich da wohl nicht weit.

    Hat jemand zufällig eine Idee, wie ich das (wenn möglich mit wenig Aufwand, logisch XD) machen könnte?

    Frauen lügen nie, selbst wenn sie die Wahrheit nur erfinden müssen.
    Leute die mit gidf antworten wollen, sollten lieber gar nicht antworten. -> http://www.google.de/search?q=xyz tuts auch. :rolleyes:

  • Ja, ich dachte auch an sowas...
    Also erst auslesen, und danach zusammengezählt in ein Array packen - das problem ist aber, das da noch andere Daten sind, die angezeigt werden (neben gold, silber, bronze sind da noch msn, icq, bundesland, etc. etc.). Deshalb hoffe ich, ob man das nicht schon im SELECT irgendwie machen kann...

    Sonst muss ich mich irgendwie auf eine komplizierte Lösung einigen XD

    Frauen lügen nie, selbst wenn sie die Wahrheit nur erfinden müssen.
    Leute die mit gidf antworten wollen, sollten lieber gar nicht antworten. -> http://www.google.de/search?q=xyz tuts auch. :rolleyes:

  • Wozu den einen speziellen Mysqlquery

    Groupieren kann man doch schön mit Arrays...

    Einmal editiert, zuletzt von Pion (28. Juli 2010 um 22:56)

  • Ok, danke...

    Nur, scheinbar habe ich nicht alle Informationen bekannt gegeben... x)

    Gold ist 10* silber und 100* bronze wert, silber ist demnach 10* bronze wert.

    Mit SUM() kann man das nicht multiplizieren... Naja, danke für deine Hilfe - aber ich muss wohl doch die komplizierte Lösung mit arrays machen...

    Frauen lügen nie, selbst wenn sie die Wahrheit nur erfinden müssen.
    Leute die mit gidf antworten wollen, sollten lieber gar nicht antworten. -> http://www.google.de/search?q=xyz tuts auch. :rolleyes:

  • Quark, sowas kann man direkt in MySQL machen was auch performanter ist.

    SQL
    SELECT `ID` , `NAME` , `GOLD`+`SILBER`+`BRONZE` AS `SUMME` FROM tabelle ORDER BY `GOLD`+`SILBER`+`BRONZE` ASC LIMIT 1

    -> gibt die ID, den NAME und die SUMME von demjenigen der die höchste Summe aus den 3 Spalten hat. Ginge natürlich auch ohne Limitierung wenn man mehrere Plätze haben möchte.

  • ah - danke, ja so würde es theoretisch gehen.

    nur, was ich gerade bemerkt habe (das wusste ich gar nicht...): die goldmünzen sind noch unterteilt in bank und normale. also neben der spalte "gold" gibt es auch noch "bank", welche genauso viel wert hat, wie die spalte gold.

    ich nehme nicht an, dass du auch dafür noch so eine elegante lösung weist? :D

    Frauen lügen nie, selbst wenn sie die Wahrheit nur erfinden müssen.
    Leute die mit gidf antworten wollen, sollten lieber gar nicht antworten. -> http://www.google.de/search?q=xyz tuts auch. :rolleyes:

  • Ich verstehe nicht was da das Problem sein soll. Du müsstest diese Spalte doch nur mit zu der Summe ergänzen, wenn es dem entspricht was Du willst?! Ansonsten müsstest Du die gewünschte Berechnung genauer erläutern.

  • Okay, ich versuchs mal:

    Ich habe eine recht grosse MySQL Tabelle:
    username, rights, email, password, msn, icq, bundesland, eingaben, online-zeit, [...], gold, bank, silber, bronze, kekse.

    Kekse ist quasi die "Grundwährung". 10 Kekse sind eine Bronzemünze, 100 Kekse sind eine Silbermünze und 1000 Kekse sind eine Goldmünze. Man kann dieses Geld aber verlieren. Deshalb gibt es die Bank. Dort kann man seine Goldmünzen lagern. (wenn man die benötigten Gutscheine für eine Lagerung hat.).

    Jetzt habe ich eine Topliste. Jene kann man nach Online-Zeit, Eingaben, etc. ordnen lassen. Das mache ich, indem ich einfach die SELECT-Abfrage mit ORDER BY `eingaben` DESC (z.B.) mache. Um jetzt eine Topliste für das gesamte Vermögen zu machen, reicht natürlich ein ORDER BY nicht, da ja das Geld in verschiedenen Spalten ist, und nicht immer gleich viel Wert hat.

    Ich hoffte, man könnte das ebenfalls mit einem MySQL-Befehl lösen, da ich ansonsten nur die Idee hätte, alles einmal auszulesen und in ein Array zu packen, und jenes dann seperat zu sortieren und auszugeben.

    Ich hoffe, ihr versteht mein Problem jetzt... :D

    Frauen lügen nie, selbst wenn sie die Wahrheit nur erfinden müssen.
    Leute die mit gidf antworten wollen, sollten lieber gar nicht antworten. -> http://www.google.de/search?q=xyz tuts auch. :rolleyes:

  • In dem Fall wäre wie schon gesagt die Erweiterung meines Vorschlags die Lösung.

    SQL
    SELECT `ID` , `NAME` , `GOLD`+`SILBER`+`BRONZE`+`BANK` AS `SUMME` FROM tabelle ORDER BY `GOLD`+`SILBER`+`BRONZE`+`BANK` DESC
  • Sorry... Aber ich verstehe deine Query nicht ganz... Die zählt doch einfach alles zusammen. Aber wenn bei Gold 1 steht, ist das viiiel mehr, als wenn bei Kekse 1 steht.

    Oder versteh ich da was falsch?

    Frauen lügen nie, selbst wenn sie die Wahrheit nur erfinden müssen.
    Leute die mit gidf antworten wollen, sollten lieber gar nicht antworten. -> http://www.google.de/search?q=xyz tuts auch. :rolleyes:

  • Jaaa!!!! :D So geil, das funktioniert EINWANDFREI!!! Vielen Dank für die Hilfe zu einer so späten (oder frühen) Stunde.

    Frauen lügen nie, selbst wenn sie die Wahrheit nur erfinden müssen.
    Leute die mit gidf antworten wollen, sollten lieber gar nicht antworten. -> http://www.google.de/search?q=xyz tuts auch. :rolleyes: