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;";
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?
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.
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
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.
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;";
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.)
Om det finns flera poäng som är lika, vad skall gälla då? Säg att vi har följande tabell:
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ä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.
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;