Rang in tabel
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.
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)
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.?
of: newbie, exprert, master ect.?
1e, 2e, 3e
Dan moet je die query van Robert hebben.
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 :)
Gewijzigd op 01/01/1970 01:00:00 door leendert
vergeet niet speler te beveiligen met mysql_real_escape_string ;)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
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.
Wat bedoel je Terence?
En wat doet dat script van jou precies pgFrank? Waar is dat "GROUP BY" en "ORDER BY" voor?
SELECT COUNT(profiel.id)+1 AS positie FROM profiel WHERE profiel.punten > (SELECT profiel.punten FROM profiel WHERE id=[ingelogde_id])
Ook snap ik niet waarom er 2 verschillende leden (lid1 en lid2) in die query van jou zitten.
Bedankt voor die link, de basis van sql snap ik al wel, maar als het wat ingewikkelder word niet meer ;)
De query maakt een lijst aan met alle leden en hun ranking. Zie de resultaten.
Owja, nu werkt het, bedank!