Foros del Web » Programando para Internet » PHP »

ordenar y grabar posicion de los registros

Estas en el tema de ordenar y grabar posicion de los registros en el foro de PHP en Foros del Web. Hola a todos: Estoy intentando hacer una consulta a una tabla para que me ordene los registros por el campo "puntuacion_total" y en otro campo ...
  #1 (permalink)  
Antiguo 21/02/2008, 14:54
 
Fecha de Ingreso: febrero-2008
Mensajes: 3
Antigüedad: 16 años, 9 meses
Puntos: 0
ordenar y grabar posicion de los registros

Hola a todos:

Estoy intentando hacer una consulta a una tabla para que me ordene los registros por el campo "puntuacion_total" y en otro campo me muestre de forma automática la posición alcanzada "posicion_final".

Es una tabla sencilla, tiene los siguientes campos: "id_puntuación" (autoincrement), "nota_1" (decimal), "nota_2" (decimal), "puntuación_total" (decimal) y "posicion_final"

En otra tabla guardo los datos de los participantes. Hasta aquí todo bien.

La duda me surge cuando introduzco o modifico notas, con una consulta los ordeno de mayor a menor "puntuacion_total" PERO COMO PUEDO HACER PARA QUE DE FORMA AUTOMATICA SE GRABE LA POSICION QUE OCUPA CADA REGISTRO EN EL CAMPO "posicion_final".

Vamos, que quiero que me salga después de ordenarlos, el registro de mayor puntuación un 1 en el campo posicion_final, y así sucesivamente hasta el final???

MUCHAS GRACIAS A TODOS,


Saludos

Última edición por dolmenes; 25/02/2008 a las 12:49
  #2 (permalink)  
Antiguo 21/02/2008, 16:17
Avatar de pragone  
Fecha de Ingreso: diciembre-2007
Ubicación: Madrid
Mensajes: 223
Antigüedad: 16 años, 11 meses
Puntos: 2
Re: ordenar y grabar posicion de los registros

Hola...

Tu pregunta la he tenido yo también desde hace tiempo... así que finalmente me he puesto a investigar y he conseguido esta forma de lograr lo que quieres:

Si tu query es:

Código:
SELECT id_puntuacio, campo1, campo2 FROM puntuacion ORDER BY campoX DESC
Para poder tener como un campo la posición de cada registro puedes hacer:

Código:
SET @pos=0; SELECT id_puntuacio, campo1, campo2, @pos:=@pos+1 as posicion 
FROM puntuacion ORDER BY campoX DESC
y listo!!!

Saludos
__________________
pragone
Blog: Desarrollo, comunidad y monetización
Últimos artículos: Tips de Smarty

Última edición por pragone; 21/02/2008 a las 16:18 Razón: No se veía bien la segunda query
  #3 (permalink)  
Antiguo 22/02/2008, 03:12
 
Fecha de Ingreso: febrero-2008
Mensajes: 3
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: ordenar y grabar posicion de los registros

Ante todo, gracias

Lo he probado de mil maneras y no he conseguido lo que quería. También es verdad que yo no controlo mucho.

Código PHP:
$con mysql_connect'host''usuario''clave' ); 
$db mysql_select_db'competicion' ); 

$consulta "SET @pos=0; SELECT id_puntuacion, campo1, campo2, @pos:=@pos+1 as puesto FROM puntuacion ORDER BY campo2 DESC"
$sql mysql_query$consulta ) or die ( mysql_error() ); 
¿Debo entender que ejecutando este código, se grabaría de forma automática en el campo "puesto" el puesto que ocupa cada línea del registro una vez ordenada por el "campo2" de mayor a menor? Lo hice con UPDATE también pero no me ha funcionado!!! En el campo "puesto" no se graba la posición de cada registro!!!

A lo más que he llegado es a esto (lo he visto en una página), pero no soy capaz de guardar el resultado del contador en el campo "puesto" de mi tabla "puntuacion":

Código PHP:
$con mysql_connect'host''usuario''clave' );
$db mysql_select_db'competicion' ); 

$consulta "SELECT * FROM puntuacion"
$sql mysql_query$consulta ) or die ( mysql_error() ); 
$contador 1
while ( 
$row mysql_fetch_array$sql ) ) 
{   
   echo 
$contador.". ".$row[puesto]=$contador."</br>"
   
$contador++; // incrementamos el contador en 1 unidad 


Saludos
  #4 (permalink)  
Antiguo 24/02/2008, 14:41
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 23 años
Puntos: 655
Re: ordenar y grabar posicion de los registros

Trasladado de BD a PHP. Favor no poner código de programación en BD.

Función de la sección de Base de Datos
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:44.