Rang in tabel
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.
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.
Gesponsorde koppelingen:
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.
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.?
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.
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 :)
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.
Jongens dit gaat even boven mijn pet;)
Wat bedoel je Terence?
En wat doet dat script van jou precies pgFrank? Waar is dat "GROUP BY" en "ORDER BY" voor?
Wat bedoel je Terence?
En wat doet dat script van jou precies pgFrank? Waar is dat "GROUP BY" en "ORDER BY" voor?
Heb je de query al eens uitgevoerd? Dan zie je in elk geval wat het resultaat is.
Cursus SQL, welliswaar met Access, maar het is wel in het nederlands geschreven.
Cursus SQL, welliswaar met Access, maar het is wel in het nederlands geschreven.
Ja maar ik snap niet wat het toevoegd (beter dan) aan deze query:
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 ;)
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 ;)
lid1 en lid2 zijn geen leden, maar aliasen van tabellen. Om precies te zijn, verschillende aliasen van dezélfde tabel, namelijk de tabel 'leden'.
De query maakt een lijst aan met alle leden en hun ranking. Zie de resultaten.
De query maakt een lijst aan met alle leden en hun ranking. Zie de resultaten.
Owja, nu werkt het, bedank!



