Bueno la solución es posible con MySQL (En una sola consulta), la idea es crear un campo temporal con la numeración, aquí encontrarás un ejemplo:
MySQL – running totals/determine row position
Ahora una solución con PHP que no me parece tan optima pero igual funciona:
Código PHP:
Ver original<?php
$sql = 'select * from puntaje order by p desc';
$x = 1;
$data[$reg['id']] = array('puntaje' => $reg['p'], 'pos' => $x++); }
echo $data[1]['pos'] . '<br />'; //id 1 = posición 3
echo $data[2]['pos'] . '<br />'; //id 1 = posición 1
echo $data[3]['pos'] . '<br />'; //id 1 = posición 2
echo $data[4]['pos'] . '<br />'; //id 1 = posición 4
Espero que te sirva alguna de las 2 formas, para mayor información consulta en el foro de MySQL. Saludos.