Foros del Web » Programando para Internet » PHP »

Ayuda! Orden de registros

Estas en el tema de Ayuda! Orden de registros en el foro de PHP en Foros del Web. Amigos, me piden que agregue un campo a una tabla para ordenar el orden en que apareceran los registros.Es esto factible, que recomiendan que haga? ...
  #1 (permalink)  
Antiguo 17/03/2004, 11:52
 
Fecha de Ingreso: diciembre-2002
Mensajes: 472
Antigüedad: 15 años
Puntos: 0
Ayuda! Orden de registros

Amigos, me piden que agregue un campo a una tabla para ordenar el orden en que apareceran los registros.Es esto factible, que recomiendan que haga?
Vale decir un campo donde el usuario ponga 5 y todos los campos se renombren y actualicen y ese registro quede en orden cinco. El tema es que no se me ocurre nada y no se si mysql me ayudra con alguna funcion.Lo veo algo traido de los cabellos pero me exigen hacerlo.
Tiene alguna idea? Se escuchan con gusto y urgencia!
Saludos
Tico
  #2 (permalink)  
Antiguo 17/03/2004, 12:18
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 16 años, 1 mes
Puntos: 5
Puf!.. ideas varias pero todo dependerá del número de registros de tu bd. Si son muchos... quizás no sea muy factible hacer lo que quieres pero si no van a ser muchos registros a modificar, pues claro que se puede hacer lo que te piden.

La idea básica sería mas o menos que si el usuario pone en un registro el orden 5 tendrías que actualizar los registros con orden mayor o igual a 5. Para recorrerlos la consulta es tan sencilla como:

select * from <tu_tabla> where orden >= 5 ASC;

Una vez que tienes tu $row lo único que tienes que hacer es incrementar en uno el campo orden de todos los registros que te devuelve esa consulta, independientemente del valor que tenga y que sean consecutivos o no.

La consulta de modificación de un campo en un registro es:

update tu_tabla set orden=$row["orden"]+1 where id=$row["id"]

(revisa la sentencia, no estoy muy segura de que me falte algo, y ojo no te olvides de indicar la clave primaria en el where del update)

Eso es lo que se me ocurre apriori.

  #3 (permalink)  
Antiguo 17/03/2004, 13:12
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 14 años, 7 meses
Puntos: 1
bueno, quizas no entiendo bien tu pregunta, pero me parece que te piden que pongas un campo ,(INT UNSIGNED NOT NULL AUTO_INCREMENT como campo PRIMARY) osea que todos tus registros tendran un indice nuemrico, y aunque cambies los datos de este registro siempre estara referenciado por este indice,

Si es asi, MYSQL lo tiene previsto, de hecho es importante ponerlo se gana en velocidad y seguridad

saludos
  #4 (permalink)  
Antiguo 17/03/2004, 14:28
 
Fecha de Ingreso: diciembre-2002
Mensajes: 472
Antigüedad: 15 años
Puntos: 0
Jordi, esto lo veo como un id secundario , aparte del autoincremental, el cual va cambiando el orden.
Gracias Helbira, voy a chequear lo que me decias. Esta muy interesante. El tema tambien seria ver que hago con los campos anteriores.Es decir un campo con id secundario=5 que pasa a ser 4 , que ocurre con el que tenia el id 4 , 3, 2...?
Me esta doliendo la cabeza de pensar una solucion...
  #5 (permalink)  
Antiguo 17/03/2004, 17:59
 
Fecha de Ingreso: diciembre-2002
Mensajes: 472
Antigüedad: 15 años
Puntos: 0
Por ahi estaba pensando podria servir dejarle al usuario que vaya ingresando decimales y hacen un "order by" a partir de eso.
es decir, si el usuario quiere "mechar" un registro entre medio de otros dos (valor 3 y valor 4) que lo ingrese como "3.1" , si desea poner otro entre 3.1 y 4 darle un valor 3.11 y asi...
como lo ven?
saludos
tico
  #6 (permalink)  
Antiguo 18/03/2004, 02:21
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 16 años, 1 mes
Puntos: 5
Hombre podría ser lo de los decimales pero para eso el usuario debe conocer los valores que ya hay elegidos.

Si realmente quieres que el campo orden no puede saltarse ningún número la cosa se complica un poco más y entonces deberías controlar más cosas.

Yo te planteé una solución en la que te puedes saltar números y luego cuando los muestres todos, lo ordenas por ese campo pero no muestres su valor del campo orden sino que le asignas la secuencia resultante de realizar la consulta ordenándolo por el campo orden. No se si me expliqué

De todas formas se me olvidó añadir a mi post anterior que si el usuario elije un orden que no existe aun en la tabla, entonces no tienes porque incrementar en uno el resto de registros con orden superior. Lo insertas y listo... no tienes que reordenar nada más.

Yo sigo apostando por mi solución, es la que veo mejor de todo lo que hemos hablado.

Me cuentas, ok?
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 02:49.