---
title: "Distinct Highscore"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/177196-distinct-highscore"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "backer"
published: "2009-02-26T15:59:55.000Z"
updated: "2009-02-27T13:34:01.000Z"
replies: 17
views: 675
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/177196-distinct-highscore"
---

# Distinct Highscore

## #1 — backer, 2009-02-26T15:59Z

Har lite problem här som någon kanske kan hjälpa mig med. Jag vill få ut unika användare i en lista. Läste något om distinct skall lösa detta men får det ändå inte att fungera =/

Vill sortera på unika användare helt enkelt, såhär har jag försökt med men får ändå 2 spelare av playerId = 1

$sql = "SELECT DISTINCT playerId, scoreListId,scorePoints,scoreTime,scoreLevel,scoreName,scoreDate FROM myTestDb.tbl_highscores WHERE projectId = $projectId ORDER BY $type DESC, scoreDate ASC LIMIT $startIndex, $endIndex;";

Permalänk: https://www.webforum.nu/p/177196

## #2 — Peter S, 2009-02-26T16:59Z

Välkommen till wF!

Med Distinct får du unika *rader* i resultatet, inte enskilda kolumner.

Om du nu får dubbletter i resultatet måste du bestämma dig för vilken av de raderna du vill ha med och vilka du inte vill ha med. Så frågan är: om flera rader har samma playerId, vilken av dem vill du då visa?

Permalänk: https://www.webforum.nu/p/2173534

## #3 — backer, 2009-02-26T17:41Z

Det jag är ute efter är en highscore som visar unika användare, så t.ex. om användare 2 har spelat 5ggr så vill jag bara ha med 1 post (den som har bäst poäng).
Detta borde väll ORDER BY lösa åt mig, så jag vill bara ha med varje användares första post.

Orginal exempel
Användare Id, poäng
1                     200
1                     190
2                     185
1                     140

Vill få ut
1                     200
2                     185

Permalänk: https://www.webforum.nu/p/2173540

## #4 — Peter S, 2009-02-26T18:51Z

Använder du MySQL?

Permalänk: https://www.webforum.nu/p/2173545

## #5 — backer, 2009-02-26T19:43Z

Yes, MYSQL. =)

Permalänk: https://www.webforum.nu/p/2173549

## #6 — Peter S, 2009-02-26T19:48Z

Okej, testa:

```
SELECT 
	h.playerId,
	h.scoreListId,
	h.scorePoints,
	h.scoreTime,
	h.scoreLevel,
	h.scoreName,
	h.scoreDate 
FROM 
	myTestDb.tbl_highscores h
WHERE 
	h.projectId = $projectId AND
	h.scorePoints = (select max(scorepoints)
                           from myTestDb.tbl_highscores
                          where playerid = h.playerid
                            and projectid = $projectId)
GROUP BY
	h.playerId
ORDER BY 
	h.$type DESC, 
	h.scoreDate ASC 
LIMIT 
	$startIndex, $endIndex
```

Permalänk: https://www.webforum.nu/p/2173550

## #7 — backer, 2009-02-27T08:12Z

Det funkade ju fantastiskt.
Märkte dock ett litet problem, ifall en playerId har 2 poster med samma poäng (scorePoints), då syns båda. När jag lägger till en ny post med högre score så löser sig problemet.

Permalänk: https://www.webforum.nu/p/2173590

## #8 — Peter S, 2009-02-27T08:51Z

Har du med GROUP BY enligt koden ovan?

Permalänk: https://www.webforum.nu/p/2173593

## #9 — backer, 2009-02-27T09:03Z

Nu rullar det, satan i gatan va GRYM du är, tack så hemskt mycket.

Permalänk: https://www.webforum.nu/p/2173595

## #10 — Peter S, 2009-02-27T09:26Z

Kanon! :bire

Permalänk: https://www.webforum.nu/p/2173601

## #11 — backer, 2009-02-27T11:30Z

hmm, jag förstår mig helt enkelt inte på SQL =( 
Försökte använda mig utav det som du klurade ut för att få ut en rank position när man postar sitt resultat.

Så när man skickar poäng så vill jag få tillbaka att man är t.ex. på 5;e plats. Är det inte exakt samma sak förutom att jag måste räkna på att jag vill bara ha poster som är \>= poängen
h.scorePoints \>= $value AND 

```
SELECT COUNT(h.scoreId) 
   FROM myTestDb.tbl_highscores h 
   WHERE h.projectId = $projectId AND 
               h.scorePoints >= $value AND 
               h.scorePoints = (select max(scorepoints) 
                                       from myTestDb.tbl_highscores 
                                       where playerId = h.playerId and 
                                      projectId = $projectId) 
   GROUP BY h.playerId 
   ORDER BY h.$type DESC, h.scoreDate ASC;";
```

Permalänk: https://www.webforum.nu/p/2173607

## #12 — Peter S, 2009-02-27T12:11Z

Några saker att fundera på:

1) Om en spelare har flera olika resultat, vill du då få ut rankingen för $value eller för personen? (Jag kanske tidigare har ett resultat som gör att jag ligger 1:a, men $value i denna omgång kanske innebär en 5e-plats.)

2) Om det finns flera poäng som är lika, vad skall gälla då? Säg att vi har följande tabell:

```
Spelar-Id - Poäng
-----------------
1  -  200
2  -  200
3  -  199
4  -  198
...
```

Ligger då spelare 2 på första eller andra plats?

Permalänk: https://www.webforum.nu/p/2173609

## #13 — backer, 2009-02-27T12:26Z

det beror på datumet, den som sätter score först är den som har ledningen.

Permalänk: https://www.webforum.nu/p/2173612

## #14 — backer, 2009-02-27T12:31Z

kanske inte var så tydlig i svaret :)

tänkte att listningen av position(rank) är egentligen densamma som du hjälpte med innan när man får ut en lista. Man vill helt enkelt få var hamna jag i den listan. 

Högre upp på listan är poäng & datum

Permalänk: https://www.webforum.nu/p/2173613

## #15 — Peter S, 2009-02-27T13:04Z

Loopar du ut listan? I sådana fall kan du lösa det i applikationen med en räknare som håller reda på var i recordsetet du är, typ:

```
i = 1
while not rs.eof
  print rs(0) + ", position = " + i
  i = i + 1
  rs.getnext()
end while
```

Permalänk: https://www.webforum.nu/p/2173616

## #16 — backer, 2009-02-27T13:10Z

Hänger inte riktigt med. 
Men då måste jag plocka ut alla poster med den första SQL satsen du hjälpte mig med. Sedan loopa tills jag hittar poäng + användarId match. När highscore får in massor av poster kommer det bli kanontungt :(
Man vill ju ha ut antalet unika spelare åvan en själv med högre score.

Permalänk: https://www.webforum.nu/p/2173617

## #17 — backer, 2009-02-27T13:15Z

Något sådant här kanske.

```
SELECT COUNT(h.scoreId) 
FROM myTestDb.tbl_highscores h 
WHERE h.projectId = $projectId AND 
h.scorePoints >= $value 
GROUP BY h.playerId 
ORDER BY h.$type DESC, h.scoreDate ASC;
```

Permalänk: https://www.webforum.nu/p/2173619

## #18 — backer, 2009-02-27T13:34Z

försökt och testa en liten stund nu och verkar rulla.
Återigen tack så mycket Peter. :) ovärderlig hjälp!

Permalänk: https://www.webforum.nu/p/2173622

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/177196-distinct-highscore
