(mysql 5) probleme mit group by
sindy
- datenbank
0 hawkmaster0 sindy
1 Ilja
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 :(
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
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
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
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
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