![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
Tag, ich hab hier ein Problem mit einem MySQL-Query welcher sich über insgesamt 3 Tabellen erstreckt. Dabei will ich folgendes erreichen: * gameID, gameName usw.. aus der angegebenen Kategorie auslesen * den User mit der höchsten Punktzahl bei diesem Spiel auswählen Mein Query sieht derzeit so aus: Code: SELECT
gl.gameID, gl.gameName, gl.gamePath, gl.gamePicture,
MAX(s.score) AS maxScore, s.userID, u.name AS username
FROM
backend_gamesarea_gamelist AS gl
LEFT JOIN
backend_gamesarea_scorelist AS s
ON
s.gameID = gl.gameID
LEFT JOIN
backend_usertable AS u
ON
u.id = s.userID
WHERE
gl.categoryID = '1'
GROUP BY
gl.gameID
ORDER BY
gl.gameID ASC
Was ich also brauche ist noch irgendein Befehl oder eine Weise, wie ich die userID auswählen kann, die zu dem höchsten score (MAX(s.score)) gehört. Mein Kunde hat die MySQL Version 4.0.15, SubSelects werden aber erst ab 4.1 unterstützt, sonst hätte ich das Problem schon längst so gelöst.. Jemand ne Idee?
__________________ http://www.ChrisDiary.De |
| | |
| | Nach oben #2 | |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.642
| Zitat:
Damit du dann aber auch nicht 100 Ergebnisse bekommst wenn du nur eins haben willst, verwende noch LIMIT 1
__________________ I did it my way - Senseless-Blog | |
| | |
| | Nach oben #3 | ||
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
| Zitat:
Code: gameID gameName gamePath gamePicture maxScore userID username 1 Bomberman ./games/abenteuer/bomberman.swf ./games/abenteuer/bomberman.gif NULL NULL NULL 2 Streets of fire ./games/abenteuer/streetsoffire.swf ./games/abenteuer/streetsoffire.gif 9999 1 webmaster 3 Indianajones ./games/abenteuer/indianajones.swf ./games/abenteuer/indianajones.gif NULL NULL NULL 4 Megaman ./games/abenteuer/megaman.swf ./games/abenteuer/megaman.gif NULL NULL NULL 5 Links Rupee Madness ./games/abenteuer/zeldaruppee.swf ./games/abenteuer/zeldaruppee.gif NULL NULL NULL userID 3 mit score 9999 bei gameID 2 und userID 1 mit score 123 bei gameID 2 Leider wird (wie oben ersichtlich) userID 1 gewählt, obwohl userID 3 richtig wäre..
__________________ http://www.ChrisDiary.De | ||
| | |
| | Nach oben #4 |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
Keine eine Lösung für mein Problem? Es eilt ein bisschen, und ich kriegs einfach nich hin =/
__________________ http://www.ChrisDiary.De |
| | |
| | Nach oben #6 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.642
|
Wir haben darüber auch grade gebrütet und es geht leider nicht, da er unter Where/On kein Max() erlaubt. Chr!s wirds wohl auch mit 2 Querys machen müssen. Aber definitiv ein Grund, sein MySQL zu aktualisieren.
__________________ I did it my way - Senseless-Blog |
| | |
| | Nach oben #7 | |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
| Zitat:
Danke nochmal für die Hilfe, ich kriegs auch nicht anders als mit 2 Queries hin..
__________________ http://www.ChrisDiary.De | |
| | |
| | Nach oben #9 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 684
|
@Ben: Der Kunde ist nunmal König. Das war schon immer so und das wird auch immer so bleiben. Und wenn der Kunde ein Hello-World-Script für 500 Euro kaufen will, dann soll er dies auch tun. Mehr als es dem Kunden anraten kann man nunmal nicht, wenn er aber auf gute Begründungen nicht eingeht, hat man als Programmierer halt das Nachsehen oder man sagt ihm dann, dass man das Projekt nicht annehmen kann/will und das Geld fließt in die Taschen eines anderen Entwicklers, dem es eben scheißegal ist, was der Kunde für ne Version benutzen will. EDIT: Zum Thema selbst fällt mir gerade ein, dass ich das selbe Problem bei meinem Forum hatte: Eine Tabelle für die Foren, eine für die Threads und eine für die Posts. Glaubst du es hat funktioniert in einem (!!) Query (ohne Subqueries, die gab es damals noch nicht), eine Foren-Übersicht auszulesen, in der dann der letzte Post mit User per Join angezeigt wurde? Es war schlichtweg nicht möglich. Man bekam immer mal irgendeinen Post / User heraus, aber nie den neuesten (komischerweise war es aber auch nie der Selbe!?). Ich musste dann umsteigen und temporäre Spalten für DATETIME, PostID, ThreadID und UserID in den anderen Tabellen anlegen
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll Geändert von MrNiceGuy (01.09.2006 um 06:18 Uhr). |
| | |
| | Nach oben #10 |
| Erfahrener Benutzer Registriert seit: 27.02.2006
Beiträge: 146
|
Hallo, also die Query arbeitet völlig korrekt. Ich vermute mal, Du suchst so eine Abfrage: Code: SELECT
gl.gameID,
gl.gameName,
gl.gamePath,
gl.gamePicture,
sa.score as maxScore,
sa.userID,
u.name as username
FROM
backend_gamesarea_gamelist AS gl
LEFT JOIN
(
SELECT
s.userID,
s.gameID,
s.score
FROM
(
SELECT
MAX( score) as maxscore,
gameID
FROM
backend_gamesarea_scorelist
GROUP BY
gameID
) AS a,
backend_gamesarea_scorelist AS s
WHERE
s.score = a.maxscore AND s.gameID = a.gameID
) AS sa
ON
sa.gameID = gl.gameID
LEFT JOIN
backend_usertable AS u
ON
u.id = sa.userID
WHERE
gl.categoryID = '1'
GROUP BY
gl.gameID
ORDER BY
gl.gameID ASC
Jumper, the II. Geändert von JumperII (01.09.2006 um 10:05 Uhr). |
| | |
| | Nach oben #11 | ||
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.642
| Zitat:
Zitat:
__________________ I did it my way - Senseless-Blog | ||
| | |
| | Nach oben #12 |
| Erfahrener Benutzer Registriert seit: 27.02.2006
Beiträge: 146
|
Ups ... mir entgangen, dass es erst sei t 4.1 drin ist ... naja, dann empfehle ich, die Anwendung umzuprogrammieren. Einfach eine zusätzliche Tabelle mit dem highscore eines spieles mit verwalten. Alternativ natürlich n Abfragen, für n Spiele .... Ansonsten kannst Du probieren, einen primären Schlüssel auf die score-table zu setzen, bei der nach gameID+score+userid sortiert wird. Dann könnte der JOIN ausversehen das richtige Element rausgeben. // EDIT: Ich hab es mal bei einer testdatenbank bei mir getestet ... allerdings unter 5.0 .... Code: SELECT
gl.gameID, gl.gameName, gl.gamePath, gl.gamePicture,
s.score AS maxScore, s.userID, u.name AS username
FROM
backend_gamesarea_gamelist AS gl
LEFT JOIN
backend_gamesarea_scorelist AS s
ON
s.gameID = gl.gameID
LEFT JOIN
backend_usertable AS u
ON
u.id = s.userID
WHERE
gl.categoryID = '1'
GROUP BY
gl.gameID
ORDER BY
gl.gameID ASC
Code: CREATE TABLE `backend_gamesarea_scorelist` ( `userID` int(11) NOT NULL, `score` bigint(20) NOT NULL, `gameID` int(11) NOT NULL, PRIMARY KEY (`gameID`,`score`,`userID`) ) Code: gameID gameName gamePath gamePicture maxScore userID username 1 Bomberman ./games/abenteuer/bomberman.swf ./games/abenteuer/bomberman.gif NULL NULL NULL 2 Streets of fire ./games/abenteuer/streetsoffire.swf ./games/abenteuer/streetsoffire.gif 123 1 webmaster 3 Indianajones ./games/abenteuer/indianajones.swf ./games/abenteuer/indianajones.gif NULL NULL NULL 4 Megaman ./games/abenteuer/megaman.swf ./games/abenteuer/megaman.gif NULL NULL NULL 5 Links Rupee Madness ./games/abenteuer/zeldaruppee.swf ./games/abenteuer/zeldaruppee.gif NULL NULL NULL Jumper, the II. Geändert von JumperII (01.09.2006 um 11:58 Uhr). |
| | |
| | Nach oben #14 |
| Erfahrener Benutzer Registriert seit: 27.02.2006
Beiträge: 146
|
Stimmt ... bliebe noch die Lösung, ohne MAX( score) und Group By auszukommen und die Sortierung nach GameID und Score desc zu setzen .... dann ist es im Resultat immer der erste Eintrag zur GameID ... Gruß, Jumper, the II. |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| query umschreiben | nibblas | Datenbanken | 5 | 04.07.2007 16:41 |
| Datensaetze aus 2 Tabellen mit java klasse abfragen | Aristotelis | Datenbanken | 7 | 31.05.2007 09:40 |
| MySQL Fehlermeldung: Your query requires a full tablescan ... | Chr!s | Datenbanken | 12 | 31.07.2006 21:45 |
| Query verbessern? | björn | Datenbanken | 4 | 05.06.2006 13:48 |
| Probleme mit Tabellen | Bookworm | HTML, XML und CSS | 10 | 28.12.2005 13:56 |