Seite 1 von 1

MySQL abfrage einschränken

Verfasst: 06.12.2003 13:33
von mirk
die jetztige db abfrage aus einem teil des activity mods sieht so aus.

Code: Alles auswählen

$sql = "SELECT * FROM " . iNA_SCORES . "
            WHERE game_name = '" . $game_name . "'
            ORDER BY score DESC";
und liefert eine liste mit allen usern die das bestimmte game gespielt haben und die dazu gehörige punktzahl. ein user kann 50 mal spielen, wird 50 mal in der tabelle gespeichert und mit der abfrage taucht er auch 50x in der liste auf.

kann mir jemand die abfrage so umschreiben das jeder user in der liste nur noch einmal auftaucht. und zwar mit der höchst errichten punktzahl.


tabellenfelder:

Code: Alles auswählen

  `game_name` varchar(255) default NULL,  ---->name des spiels
  `player` varchar(40) default NULL,---->name des spielers
  `score` int(10) unsigned NOT NULL default '0', ----   > erreichten punkte
  `date` int(11) default NULL---->datum

Re: MySQL abfrage einschränken

Verfasst: 07.12.2003 00:25
von D@ve
mirk hat geschrieben:die jetztige db abfrage aus einem teil des activity mods sieht so aus.

Code: Alles auswählen

$sql = "SELECT * FROM " . iNA_SCORES . "
            WHERE game_name = '" . $game_name . "'
            ORDER BY score DESC";
und liefert eine liste mit allen usern die das bestimmte game gespielt haben und die dazu gehörige punktzahl. ein user kann 50 mal spielen, wird 50 mal in der tabelle gespeichert und mit der abfrage taucht er auch 50x in der liste auf.

kann mir jemand die abfrage so umschreiben das jeder user in der liste nur noch einmal auftaucht. und zwar mit der höchst errichten punktzahl.


tabellenfelder:

Code: Alles auswählen

  `game_name` varchar(255) default NULL,  ---->name des spiels
  `player` varchar(40) default NULL,---->name des spielers
  `score` int(10) unsigned NOT NULL default '0', ----   > erreichten punkte
  `date` int(11) default NULL---->datum
Sorry, hab gerade keine Zeit zu großen Experimenten aber probier mal:

Code: Alles auswählen

SELECT player, score FROM games WHERE gamename = 'bla' GROUP BY player ORDER BY score DESC;
Sollte funktionieren, aber: Alle Angaben ohne Gewähr...

Gruß, Dave

Verfasst: 07.12.2003 13:45
von mirk
habs mal so umgeschrieben:

Code: Alles auswählen

    $sql = "SELECT score, player FROM " . iNA_SCORES . "
            WHERE game_name = '" . $game_name . "'
            GROUP BY player
	    ORDER BY score DESC";
es wird jetzt jeder user nur einmal angezeigt genau wie ich es wollte. aber leider nicht mit seiner bestleistung (höchsten punktzahl).

wie schaffe ich es das die höchste punktzahl pro spieler gezeigt wird?

Verfasst: 08.12.2003 18:55
von mirk
haben wir keinen mysql profi hier wo mir das schnell sagen kann?

also grundsetzlich muss man einfach die tabellen ergebnisse nach player gruppieren(das haben wir ja jetzt) und nur noch den höchsten score auslesen. hab nicht so gross ahnung aber ich dänke das es nicht so schwirig ist. gibts nicht ne funktion MAX oder so?

Verfasst: 08.12.2003 19:37
von D@ve
Max gibt's leider nur in SQL...

Verfasst: 08.12.2003 20:50
von mirk
gibt es keine andere variante?