Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

otra de renumerar campos

Estas en el tema de otra de renumerar campos en el foro de Mysql en Foros del Web. Buen día :) Tengo una tabla, la cual contiene un cuestionario, la tabla incluye dos campos, idpreg y pregunta, aunque sé que no es lo ...
  #1 (permalink)  
Antiguo 19/08/2010, 13:24
Avatar de venom_mau  
Fecha de Ingreso: julio-2009
Mensajes: 152
Antigüedad: 14 años, 9 meses
Puntos: 2
Pregunta otra de renumerar campos

Buen día :)

Tengo una tabla, la cual contiene un cuestionario, la tabla incluye dos campos, idpreg y pregunta, aunque sé que no es lo más conveniente uso los idpreg, que podría ser un índice, ya que va del 1 al 24, y con ese "id", retomo la pregunta para poder actualizarla o borrarla ya que ese cuestionario es modificable.

He buscado por internet, incluso en el foro, retomando este post:
http://www.forosdelweb.com/f86/faqs-...1/#post2802568

Incluso puse esta línea en mi consulta para actualizar el idpreg pero no resulta:
Código PHP:
$act_reg=$_POST['idpreg'];
mysql_query("update cuestionario set idpreg=idpreg-1 where idpreg>'$act_reg'"); 
Para poder reordenar el cuestionario cuando el usuario elimine una pregunta.

No sé si se pueda ahcer esto, o deba cambiar la manera en que gestiono ese cuestionario.

Gracias por su tiempo y respuestas. :)
  #2 (permalink)  
Antiguo 19/08/2010, 13:29
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 9 meses
Puntos: 150
Respuesta: otra de renumerar campos

A ver si entiendo tu problema, tu tienes tu tabla tal que:

1 - Pregunta uno
2 - Pregunta dos
3 - Pregunta tres
4 - Pregunta cuatro

Y quieres que si borramos por ejemplo la "2 - Pregunta dos" el 3 pase a ser 2 y el 4 pase a ser 3. ¿es asi?
  #3 (permalink)  
Antiguo 19/08/2010, 13:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: otra de renumerar campos

El post al que haces referencia usa una forma dinámica de obtener una tabla para mostrar. No está planteado para actualizar datos en la tabla.
Es aplicable a tu caso, pero recuerda que los ID creados en la consulta no se almacenan (no se deben almacenar por cuestiones históricas y de otra), ya que una PK autonumérica o numérica incremental no se debe modificar. Lo que se obtendría es un listado de las preguntas, perfectamente ordenado y numerado sin haber modificado para nada los ID de su tabla de origen.

Respecto a la renumeración de PK te recuerdo: Renumerar un campo autoincrement
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 20/08/2010, 08:36
Avatar de venom_mau  
Fecha de Ingreso: julio-2009
Mensajes: 152
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: otra de renumerar campos

Gracias por las respuestas y el interes.

Vun
Así es, tengo en un formato parecido un cuestionario, y mi problema se da porque el cuestioanrio debe ser modificable, eliminarse preguntas, agregarlas, etc.

gnzsoloyo
El cuestionario lo uso en dos sitios diferentes, una página lo usa para solo mostrarlo, y que los usuarios normales del sistema lo usen para calificar.
Otra página es para el administrador del sistema, y este puede modificarlo a su antojo.

Me propones entonces sólo usar su número (idpreg), para cuestiones de consultas y al mostrarlo usar una numeración o listado valiéndome de php?

Ése idpreg lo uso sólo para identificar la pregunta, y por medio de él acceder a ella y obtenerla para mostrarla en página, la tabla que contiene el cuestionario es sencilla, solo tengo dos campos; idpreg (número de pregunta) y pregunta (la pregunta en sí), no creo que se altere mucho, quizá agreguen alguna pregunta, pero el objetivo es que sea flexible si en determinado punto el administrador desea modificarlo.

Sé que no es conveniente alterar campos que sean usados como pk, pero no se me ocurre otra forma de actualiar el cuestioanrio cuando sea conveniente...

Gracias :D
  #5 (permalink)  
Antiguo 20/08/2010, 08:49
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 9 meses
Puntos: 150
Respuesta: otra de renumerar campos

Creo que deberias cambiar el planteamiento, es decir, si se borra una pregunta que no importe si queda tal que:

1 - pregunta uno
3 - pregunta tres
16 - pregunta dieciseis

Luego tu cuando muestres dicha lista de preguntas, te encargas con PHP de mostrarlo tal que:

1 - Pregunta uno
2 - Pregunta tres
3 - Pregunta dieciseis

Tan facil como inicializar una variable $v=1 e ir aumentandola $v++ e ir mostrandola. Espero que te sirva la idea.
  #6 (permalink)  
Antiguo 20/08/2010, 09:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: otra de renumerar campos

Se estan mezclando dos dos conceptos distintos: Una cosa es lo que el usuario ve, y otra diferente es lo que el sistema administra.
Para el caso, el usuario verá las preguntas numeradas en un orden incremental. Eso es irrelevante y sólo sirve para referencia en el momento en que el usuario interactúa.
En tanto el usuario esté interactuando en la página, el formulario conservará en memoria la tabla donde se encuentran tanto los Id dinámicos, como los id reales que deben ser invisibles al usuario, de este modo, si el usuario resuelve la pregunta, la respuesta se obtiene en las siguientes capas usando la misma tabla, la cual contiene el par de Ids. De ese modo la respuesta correcta se obtiene de la base no usando el Id dinámico sino el real.
¿Se entiende?
El otro ID, el real de la tabla, sólo debe ser accesible a quien administra los datos.

Este modelo, en el que coexisten ambos ID, aunque uno de ellos sólo exista en el formulario activo, es el modelo que usa, por ejemplo, Oracle para sus exámenes On-Line (lo sé porque estuve cursando los Niveles I y II re Oracle 11g recientemente). Si cargabas dos veces consecutivas el formulario del mismo examen, el orden de las opciones de las preguntas cambiaba, aunque no cambiase el orden de las preguntas en sí.
El uso que se les da, además de facilitar la creación de examenes dinámicos, es precisamente asegurarse que no hubiese dos exámenes iguales.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 20/08/2010, 09:53
Avatar de venom_mau  
Fecha de Ingreso: julio-2009
Mensajes: 152
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: otra de renumerar campos

Entonces manejar un id para solo representar la pregunta y otro que maneje el administrador, que sea el real y sea modificable?

Entonces tendría idpreg, idrealpreg y pregunta como campos...

Creo que mejor no doy esa opción de eliminar preguntas, sólo modificarlas... :D
  #8 (permalink)  
Antiguo 20/08/2010, 10:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: otra de renumerar campos

No lo estás entendiendo correctamente: El Id para visualizar desaparece cuando vas a la base de datos, porque existe sólo para la página y para administrar el script que controla el formulario en ejecución.
Además, ¿qué tiene de complicado?, es una de las formas más simples y habituales de trabajarlo: En la tabla tienes una posición, con la cual puedes recuperar el ID transitorio y al mismo tiempo el ID real. Con el Id real manejas la base y con el transitorio la página...

No te ahogues en un vaso de agua. Imaginate que estás listando alumnos: La lista se numera de 1 en 1, pero las PK de los alumnos son sus matrículas o sus documentos...
Es el mismo caso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 23/08/2010, 11:28
Avatar de venom_mau  
Fecha de Ingreso: julio-2009
Mensajes: 152
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: otra de renumerar campos

Gracias gnzsoloyo

Me ha quedado perfecto, tardé algo en entender pero ya me actualiza los id´s.

Ahora una pregunta, para ser un campo autoincrement, el campo debe ser del tipo int verdad?
Ese campo podrá iniciar desde 0 o debe iniciar desde 1, me refeiro al conteo.

Gracias
  #10 (permalink)  
Antiguo 23/08/2010, 11:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: otra de renumerar campos

Un autoincrement comienza siempre de 1, aunque le puedes meter un 0 manualmente, pero no tiene ninguna utilidad. Es como si tuvieses un documento de identidad número cero. ¿Alguna vez viste uno?
Por otro lado, no los he usado pero se supone que un autoincrement podría ser FLOAT o DECIMAL, pero también es inútil: MySQL sólo genera enteros como auto_increment:
Código MySQL:
Ver original 
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 24/08/2010, 09:14
Avatar de venom_mau  
Fecha de Ingreso: julio-2009
Mensajes: 152
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: otra de renumerar campos

De nuevo, gracias gnzsoloyo.

Saludos :D

Etiquetas: campos
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 23:16.