Hola de nuevo:
En realidad eso de ordenar y buscar al jugador es irrelevante, lo que tienes que hacer como te dije es contar el número de jugadores que tienen más puntos que el jugador en cuestión... Si observas el segundo ejemplo que pongo es justo lo que necesitas, presentando la información en forma de columnas:
Código MySQL:
Ver original+------+--------+----------+---------+
| id | nombre | pcanicas | pcartas |
+------+--------+----------+---------+
| 1 | juan | 154 | 521 |
| 2 | marcos | 378 | 378 |
| 4 | silvia | 487 | 554 |
| 5 | anna | 55 | 14 |
+------+--------+----------+---------+
-> WHERE T2.pcanicas
>= T1.pcanicas
) rank_canicas
, -> WHERE T2.pcartas
>= T1.pcartas
) rank_cartas
-> WHERE T1.nombre
= 'juan'; +------+--------+--------------+--------------+
| id | nombre | rank_canicas | rank_cartas |
+------+--------+--------------+--------------+
| 1 | juan | 3 | 2 |
+------+--------+--------------+--------------+
Mucho ojo, en tu post pones en el rank de cartas como primero, sin embargo silvia tiene más puntos que juan... supongo que se trata simplemente de un error de dedo.
Ahora bien, también podrías obtener el resultado en forma de renglones, aunque la consulta es un poco más complicada.
Código MySQL:
Ver original -> WHERE nombre
= 'juan') -> WHERE nombre
= 'juan'); +---------+--------------------+
+---------+--------------------+
| canicas | 3 |
| cartas | 2 |
+---------+--------------------+
Ambas consultas son bastante ineficientes por cierto, pero eso se debe a que desde mi punto de vista tienes un pésimo modelo de datos, pero bueno, puedes hacer la prueba para ver qué tanto se tardan en ejecutar estas consultas, o como lo planteas hacer cada consulta por separado, pero olvídate de eso de ordenar y buscar... simplemente cuenta el numero de jugadores con mayor puntuación.
Saludos
Leo.