Is het mogelijk om door één query zonder allemaal php-functies er omheen de positie in een lijst te achterhalen?

Ik heb bijvoorbeeld een kolom 'posts' in een tabel en ik wil achterhalen op welke plaats degene met het id 14 staat in de 'highscore' van het posten.
Ik heb het anders opgelost.

Eerst selecteer ik het aantal posts, dan selecteer ik de mensen met meer punten, dan selecteer ik de mensen met evenveel punten en een lager id. Die aantallen tel ik bij elkaar op. Dan krijg je de plaats :D
Hmmm, klinkt niet als de meest efficiente manier. Volgens mij kan dit met 1 query. Laat eens het datamodel zien.
datamodel?
En laat ook eens je oplossing zien? Is ten eerste voor sommige onder ons ook wel interressant om te zien, hoe jij dit hebt opgelost! En ten tweede, kunnen andere mensen, dit proberen te vereenvoudigen! ;)
Ojah, en datamodel, is de opzet van je database. De structuur zeg maar. Wat er in welke tabel staan enz. (Zeg ik het zo goed jongens ;)
ah, op die fiets :P


tabel users

id | naam    | posts
1  | Herjan  | 31
2  | Pietje  | 11
3  | Flappie | 56
4  | Jantjuh | 11


<?php

$sql1 = "SELECT posts FROM users WHERE id = 1 LIMIT 1"
$res1 = mysql_query($sql1);
// errorafhandeling
$row1 = mysql_fetch_array($res1);

$sql2 = "SELECT id, naam FROM users WHERE punten > ".$row1['posts'].""
$res2 = mysql_query($sql2);
// errorafhandeling

$sql3 = "SELECT id FROM users WHERE punten = ".$row1['posts']." AND id < ".$id.""
$res3 = mysql_query($sql3);
// errorafhandeling

$rank = mysql_num_rows($res2) + mysql_num_rows($res3);

if(mysql_num_rows($res[2]) == 0)
{
$rank++;
}

// Deze if is omdat het anders niet klopt :P

echo 'Gebruiker '.$row1['naam'].' staat op plaats '.$rank.'!';

?>

Reageren