sindy: (mysql 5) probleme mit group by

guten morgen,

ich hab da ein mysql problem und komme einfach nicht weiter.
ich habe folgende zwei tabellen:

scores
------
score_id
score
game_id
entry_date

games
------
game_id
name

ich möchte jetzt ein top 10 bekommen, also von jedem spiel die höchste punktezahl, sowie die score.id zum entsprechenden maximum. mein versuch:

SELECT MAX(scores.score) as mscore, scores.score_id AS sid, scores.game_id
FROM scores, games
WHERE scores.game_id = games.id
GROUP BY scores.game_id
ORDER BY scores.entry_date DESC LIMIT 10

jetzt bekomme ich zwar die hiscores, aber eine falsche id dazu... also beispielsweise folgender tabelleninhalt von scores:

score_id  |  score  |  game_id  |
------------------------------
1  |  123  |  1
2  |  234  |  2
3  |  345  |  1

das resultat der abfrage ist dann:

1  |  345  |  1  <-- falsche score_id
2  |  234  |  2

ich verstehe das resultat einfach nicht :(

  1. Hallo

    das resultat der abfrage ist dann:

    1  |  345  |  1  <-- falsche score_id
    2  |  234  |  2

    kann es sein das das nicht deine gewünschte Score ID ist sondern nur die game_id die du in seinem SELECT holst?

    vielen Dank und viele Grüße
    hawk

    1. kann es sein das das nicht deine gewünschte Score ID ist sondern nur die game_id die du in seinem SELECT holst?

      vielen Dank und viele Grüße
      hawk

      ja das stimmt, kann aber auch ein zufall sein, sowohl das entsprechende spiel als auch die punktezahl mit dem niedrigeren wert haben die gleiche id (in unterschiedlichen tabellen).

      dann verstehe ich das resultat aber erst recht nicht... ich selektiere ja scores.id AS sid und frage dann im php code auch sid ab.

      gruß
      sindy

  2. yo,

    das problem liegt an mysql. jedes andere dbms würde dir bei deiner anweisung eine fehlermeldung zurück geben, nur mysql geht dort andere wege. grundsätzlich ist die regel, du kannst nur spalten bei einer gruppierung ausgeben (ausser mit aggregat-funktionen), über die du auch gruppierst hast. in deinem falle wäre das die id der games.

    du gibst aber zusätzliche die scoreid aus und das macht nur mysql mit, wo dann auch deine probleme anfangen. es kann nämlich theoretisch sein, dass bei einem spiel der gleiche score erreicht wird. willst du dann beide anzeigen, nur eine.....

    meistens löst man dein problem mit unterabfragen. welche version von mysql benutzt du ?

    Ilja

    1. meistens löst man dein problem mit unterabfragen. welche version von mysql benutzt du ?

      Ilja

      Gibt es so große unterschiede zwischen den versionen?
      momentan läuft das ganze lokal auf xampp, mit mysql 5.0.51b. später soll das ganze online, da kenne ich die genaue version nicht, aber auf jeden fall ein 5.x

      mit unterabfragen meinst du select im select oder?

      gruß
      sindy

      1. yo,

        Gibt es so große unterschiede zwischen den versionen?

        zum teil sehr grosse, zum zum beispiel der schritt von 40. auf 4.1, weil erst aber dieser version unterabfragen unterstützt werden.

        mit unterabfragen meinst du select im select oder?

        genau, und zwar ist es auch noch eine spezielle unterabfrage, die korreliert, das heißt die werte ergebnisse der unterabfrage beziehen sich auf die äußere abfrage. wenn du dabei hilfe brauchst, sie zu erstellen, dann sag bescheid.

        Ilja