Hallo allemaal,

Ik werk met een puntensysteem, nu wil ik in het profiel van elk lid de plaats op de ranglijst laten zien.

Dit is zeg maar de tabel:
- id
- naam
- punten

Het moet dus gesorteerd worden op punten, wie de meeste punten heeft is eerste.

Hoe reken ik eenvoudig uit op welke rang iemand staan om dit vervolgens in zijn profiel te tonen?

Mijn kennis is echt nog niet voldoende om dit voor elkaar te krijgen.
Heb je beschiking over MySQL5? (of PostgreSQL)

Dan kan je met een subquery werken bijvoorbeeld:

SELECT COUNT(profiel.id)+1 AS positie FROM profiel WHERE profiel.punten > (SELECT profiel.punten FROM profiel WHERE id=[ingelogde_id])

Zo telt die alle mensen die Meer punten hebben dan de opgevraagde gebruiker.
In ieder geval bedankt maar ik heb mysql 4.3 :s
Maar in MYSLQ 4, hoe kan het daar dan? Met een hele andere manier?
Denk eerlijk gezegt dat de query van Robbert in 4 ook gewoon werkt. Maar waarom probeer je het niet gewoon in je phpmyadmin. Je krijgt vanzelf een meldig dat het niet klopt en van een select query kan je DB ook niet stuk gaan (denk ik :P)
Houdt rang in: 1e, 2e, 3e ect.?
of: newbie, exprert, master ect.?
Aron schreef op 12.10.2007 16:34
Houdt rang in: 1e, 2e, 3e ect.?
of: newbie, exprert, master ect.?


1e, 2e, 3e
Dan moet je die query van Robert hebben.
Hmm ik snap die query niet echt.

SELECT COUNT(profiel.id)+1 AS positie FROM profiel WHERE profiel.punten > (SELECT profiel.punten FROM profiel WHERE id=[ingelogde_id])

Ik heb een tabel "leden", en voor het berekenen van de rang heb ik toch alleen het veld "lid_id" en "punten" nodig?

Waar staat het woordje "positie" voor in deze query?

edit: ik ben er uit:
$sql2="SELECT COUNT(id)+1 AS positie FROM leden WHERE punten > (SELECT punten FROM leden WHERE id='".$speler."')";
Zo werkt de query bij mij :)
vergeet niet speler te beveiligen met mysql_real_escape_string ;)

SELECT 
	lid1.naam, 
	lid1.punten, 
	COUNT(lid2.punten) AS ranking 
FROM 
	leden AS lid1, 
	leden AS lid2 
WHERE 
	lid1.punten <= lid2.punten 
OR (
		lid1.punten = lid2.punten 
	AND 
		lid1.naam = lid2.naam
	) 
GROUP BY 
	lid1.naam, 
	lid1.punten 
ORDER BY 
	lid1.punten DESC, 
	lid1.naam DESC

Getest en goedgekeurd.

Reageren