---
title: "Placering i Topplista"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/151032-placering-i-topplista"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "M@rtin"
published: "2006-09-07T17:57:58.000Z"
updated: "2006-09-08T11:56:53.000Z"
replies: 10
views: 479
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/151032-placering-i-topplista"
---

# Placering i Topplista

## #1 — M@rtin, 2006-09-07T17:57Z

Jag har en tabell (mysql) med namn och poäng:

```
namn   poäng
kalle  100
lisa    90
berit   50
maria   50
lars    30
elin     5
```

Nu vill jag kunna plocka ut vilken placering en viss person har. Även om personer har exakt samma poäng ska de få olika placeringar, berit har alltså placering 3 men maria har placering 4.

Hur gör man? Har läst några trådar på wF om samma problem men de har haft ännu krångligare exempel så jag har inte lyckats få till det.

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

## #2 — @nders, 2006-09-07T18:13Z

Kan du inte lösa det i presentationen?

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

## #3 — M@rtin, 2006-09-07T18:16Z

Det kan jag väl antagligen men inte effektivt. 

Alltså jag vill inte skriva placeringen brevid varje namn utan jag vill veta vilken placering just lars har t.ex. Så det är inte så bra att plocka ut alla och börja räkna.

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

## #4 — @nders, 2006-09-07T18:24Z

Ok, då förstår jag lite mer. 

\*tänker\*

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

## #5 — @nders, 2006-09-07T18:34Z

Spontan tanke (utan att kunna det minsta om mysql):

Skapa en temporär tabell med en räknare.
Stoppa in alla poster i den temporära tabellen.
Hämta ut rätt post.

Finns säkert betydligt finare lösningar...

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

## #6 — M@rtin, 2006-09-07T19:56Z

Hmm ja det skulle väl funka fast jag vet inte hur man skapar temporära tabeller och det känns som att gå över ån efter vatten.

Om man inte behöver göra skillnad på personer med samma poäng så är det ju bara att göra typ såhär:

```
SELECT COUNT(*) FROM toplist WHERE points > (SELECT points FROM toplist WHERE username='lars');
```

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

## #7 — @nders, 2006-09-08T03:15Z

Ja. Varför ska du förresten göra skillnad på folk med samma poäng?

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

## #8 — M@rtin, 2006-09-08T11:16Z

En av andledningarna är i alla fall att om jag har en enormt stor lista som är uppdelad på flera sidor så vill jag kunna gå till den sida där användaren listas. Det kan jag göra om jag vet placeringen.

Om inte annat vore det kul att veta för det känns som ett ganska enkelt problem som ändå verkar väldigt svårt att lösa snyggt ;)

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

## #9 — @nders, 2006-09-08T11:26Z

Du skulle ju kunna ha den where-sats du har nu, plus ett tillägg med folk som har samma poäng som du, fast ligger före i bokstavsordning. Det kan du göra med någon fin strängfunktion. :)

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

## #10 — Erik Juhlin, 2006-09-08T11:32Z

Du kan ju skriva ungefär så här:

```
SELECT (
	SELECT COUNT(*) FROM toplist t1
	WHERE t1.points > t0.points OR (t1.points = t0.points AND t1.userid < t0.userid)
) + 1
, points, userid, username
FROM toplist t0
ORDER BY points DESC, userid
```

Den här kan du sen använda för att veta användarens position.
Lite som din kod fast här så rankas folk med lägre id högre än de med högre id och samma poäng.

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

## #11 — M@rtin, 2006-09-08T11:56Z

Funkade utmärkt!
Den slutgiltiga koden för att plocka ut placering av ett visst namn blev alltså:

```
SELECT (
   SELECT COUNT(*) FROM users t1 WHERE t1.points>t0.points OR 
      (t1.points = t0.points AND t1.username<t0.username)
    )+1 from users t0 WHERE username='lars' ORDER BY points DESC,username;
```

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/151032-placering-i-topplista
