Devolver el numero de la fila en SQL

EnZo

Hola compares, necesito saber si existe alguna funcion o parametro especial que me devuelva la fila de un registro.
Os explico, supongamos que tengo un listado de usuarios donde quiero hacer un ranking. Ese ranking esta basado en los putos de dichos jugadores.


id|nombre|puntos|posicion

1 | Juan | 45 | 3
2 | EnZo | 15 | 1
3 | Jose | 80 | 2

Quiero hacer una unica consulta para actualizar dicho ranking. Seria algo así:

UPDATE ranking SET posicion=(num_tabla) ORDER BY puntos DESC

Donde (num_tabla) seria una funcion o parametro que devuelve el numero de esa fila.

Espero que se haya entendido. Esto es posible? o tengo que recorrer tooooooooda la tabla con php e ir modificando registro a registro (Manera que no haria pese a la cantidad de recursos que comeria)

Gracias de antemano.

cabron

O_o

Si te he entendido, lo que tienes que hacer es un SELECT que te devuelva la ID del registro que quieres actualizar, y luego haces un UPDATE WHERE id = la id que has obtenido antes.

EnZo

He barajado esa posibilidad, pero si hay 10000 usuarios? Y los puntos se modifican continuamente?

r2d2rigo

Replantea la BD. Haz una tabla para los datos de usuario y otra para las posiciones. A cada modificacion de usuarios (datos, puntos, etc) actualizas la tabla que contiene las posiciones en el ranking (usuario 1, posicion 10, usuario 2, posicion 1, etc) y sera mas facil de manejar :P

cabron

Vamos a ver, si te he entendido, tu problema es que quieres guardar la posición del ranking en la tabla, y cada vez que alguien cambie de puntuación, actualizar el ranking.

Habrá mil formas de hacerlo, pero si no te quieres comer la cabeza, no guardes el ranking en la tabla, guarda solo las puntuaciones, y cuando vayas a mostrar el ranking, los ordenas de mayor a mayor según las puntuaciones y listo, así solo tienes que actualizar la puntuación de cada jugador cuando cambie.

El único problema que te daría esto, es si quieres mostrar el ranking de una sola persona, que tendrías que recuperar todos los datos de la tabla ordenados, y ver que en que posición ha quedado el que quieres mostrar al ordenarlos.

p3rf3ctuz
p3rf3ctuz


El único problema que te daría esto, es si quieres mostrar el ranking de una sola persona, que tendrías que recuperar todos los datos de la tabla ordenados, y ver que en que posición ha quedado el que quieres mostrar al ordenarlos.

y eso tampoco seria muy dificill. Te bastaria con una fucion asi:

function calcular_posición($mis_puntos)
{
$sql="Select * from tabla_puntos where puntos>=$mis_puntos";
$query=mysql_query($sql);
return mysql_num_rows($query);
}

Usuarios habituales

  • p3rf3ctuz
  • cabron
  • r2d2rigo
  • EnZo