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

[SOLUCIONADO] problema autoincrement

Estas en el tema de problema autoincrement en el foro de Mysql en Foros del Web. hola, tengo una valor en una variable que es mayor a los de una campo autoincrement, al ingresarlo en la primera fila se pasa a ...
  #1 (permalink)  
Antiguo 17/06/2014, 20:12
 
Fecha de Ingreso: septiembre-2012
Ubicación: montevideo
Mensajes: 131
Antigüedad: 11 años, 7 meses
Puntos: 0
problema autoincrement

hola, tengo una valor en una variable que es mayor a los de una campo autoincrement, al ingresarlo en la primera fila se pasa a la ultima sin modificar ninguna otra fila, no se como hacer para poner ese valor en la primera fila y se autoincremente hasta la ultima, acepto sugerencias.
  #2 (permalink)  
Antiguo 18/06/2014, 06:18
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: problema autoincrement

Entendamos que la columna que es AI, es PK al mismo tiempo, ¿no?
Bueno, al ser el valor que ingresas mayor al último, y siendo la PK el orden de los registros de una tabla, es obligatorio que insertar un valor mayor en un registro menor (UPDATE a una PK) el orden de los registros cambie.
En ese sentido no hay error de ninguna clase. Es forzoso que ocurra así.
Ahora bien, si lo que quiers es luego ver los registros en un determinado orden cronológico, tienes dos soluciones: 1) No actualices un campo PK (normalmente nunca se hace algo así), 2) Define un campo DATETIME para almacenar el momento de inserción, y úsalo luego para ordenar la consulta a la tabla.
Pero no podrás hacer un UPDATE sobre un PK, que además es AI, para asignarle un valor superior sin que los registros se reacomoden.
No estás trabajando con Excel. Estás usando una base de datos real. No es lo mismo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 18/06/2014 a las 08:24
  #3 (permalink)  
Antiguo 18/06/2014, 09:16
 
Fecha de Ingreso: septiembre-2012
Ubicación: montevideo
Mensajes: 131
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: problema autoincrement

tenes razon, pero no puedo solo poner AI sin que lo columna sea PK, le saque las dos propiedades y estoy probando algo como esto:
Código MySQL:
Ver original
  1. Update datosgpx Set name='$ng' Where name='$nmax'");
Cita:
Editado: Código de programacion no permitido en foros de BBDD.
siendo $ng el numero a insertar y $nmax la primer fila.
no funciona.

Última edición por gnzsoloyo; 18/06/2014 a las 09:33
  #4 (permalink)  
Antiguo 18/06/2014, 09:22
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: problema autoincrement

Partamos de la base que lo que estás planteando no tiene ningún sentido en BBDD, y que además quitar una PK (esa "propiedad" que mencionas, que no es una "propiedad") es algo que no se debe hacer.
Una tabla sin PK es una bolsa de datos basura.

Sería mejor que nos explicaras, más allá de tu intento, qué es exactamente lo que necesitas hacer, y por qué.
Por lo que se entiende del código, estás modificando los valores de un campo, para hacerlos secuenciales, pero no se entiende bien la razón de eso. Es probable, incluso, que lo que quieres lograr se pueda hacer de otro modo, mucho más eficiente y sin tener que alterar la tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/06/2014, 09:26
 
Fecha de Ingreso: septiembre-2012
Ubicación: montevideo
Mensajes: 131
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: problema autoincrement

explico el codigo bloqueado:

while con la condicion $ng>$nmax la intencion es que se actualicen estas variables cuanse se cumpla:
Código SQL:
Ver original
  1. UPDATE datosgpx SET name='$ng' WHERE name='$nmax'

Cita:
Editado: Código de programacion no permitido en foros de BBDD.
Por favor, leer las normas del foro de Bases de Datos.

Última edición por gnzsoloyo; 18/06/2014 a las 09:34
  #6 (permalink)  
Antiguo 18/06/2014, 09:35
 
Fecha de Ingreso: septiembre-2012
Ubicación: montevideo
Mensajes: 131
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: problema autoincrement

como explicarlo, agregue un id PK y AI , el campo a modificar (name)quedo con sin Pk ni AI.
ahora necesito que un valor $ng se inserte secuencialmente remplazando los valores existentes.
  #7 (permalink)  
Antiguo 18/06/2014, 09:35
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
Lo que dices no aclara la pregunta que te hice: ¿Por qué necesitas hacer esa renumeración?

Lo quiero entender para ver cuál sería el objeto y evaluar si realmente es necesario, o se puede plantear otra estrategia para cumplir el escenario sin tener que alterar tabla o datos.

Mi pregunta apunta a saber si la renumeración es sólo por razones estéticas, porque se necesita leugo para visualizar ese dato en la pantalla, o realmente se requiere por la relación de ese dato con otras tablas.
En lso dos primeros casos, no se necesita hacerlo, porque hay otros métodos.
en el último caso, hay que evaluar la conveniencia de acuerdo a la estructura de datos de la base.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 18/06/2014, 09:59
 
Fecha de Ingreso: septiembre-2012
Ubicación: montevideo
Mensajes: 131
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: problema autoincrement

es necesario si por eso mi insistencia, otro camino no conozco.
solo quiero que en una columna (que esta relacionada con otros archivos) inserte un valor y este aumente secuencialmente. disculpa mi poca capacidad paraexpresar el problema, obiamente soy novato en esto.
  #9 (permalink)  
Antiguo 18/06/2014, 10:19
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: problema autoincrement

El tema no pasa por lo novato, sino que para modificar datos de una tabla, o cambiar estructuras de la base de datos, tiene que haber reales necesidades, y realmente aún no respondes exactamente lo que pregunto.
A ver si se entiende...
Vamos a dar por supuesto que sabes que una PK es la clave única que identifica un registro dado en cuna tabla determinada, y también vamos a dar por sabido que una PK de una tabla es la forma en que dos tablas se relacionan, cuando la PK de una es FK en otra.
Adicionalmente, vamos a suponer que sabes que en BBDD no se relacionan "archivos", sino tablas, y en ese sentido no existen tales archivos en una base MySQL, como los hay en Excel.

Bien.
Supongamos que tienes una tabla con 12.000 registros, pero la PK de esa tabla no es una columna numérica, ni contiene valores numéricos secuenciales.
Para poder agregarle una columna numerada secuencialmente, sólo sería necesario agregarle una columna AI. Simple, lisa y llanamente Con eso MySQL, al erconocer que es un AI, lo numerera en el mismo orden en que aparecen en la tabla los registros, sin más.
Ahora bien, si la tbla ya tiene una PK, y la misma no es FK en ninguna otra, se dropea la PK (sin quitar la columna), y se agrega la columna, como AI y como PK.
Pero si la PK es FK en otra tabla, esto no se puede hacer. Sólo quedaría agregar una columna y numerarla secuencialmente...

Este último caso requiere de dos pasos:
1) Agregar una columna:
Código MySQL:
Ver original 
2) Hacer un UPDATE masivo para numerarlo. Para eso primero creamos una variable en la sesión, y luego hacemos el UPDATE:
Código MySQL:
Ver original
  1. SET @id=0;
  2. UPDATE tabla SET id_numerico = IF(@id=0, @id:=1,  @id:=@id+1);
Cuidado: Son DOS sentencias separadas.
3) Agregarle la restricción de NOT NULL
Código MySQL:
Ver original
  1. ALTER TABLE tabla MODIFY COLUMN id_numerico id_numerico INT UNSIGNED DEFAULT NOT NULL;

Finalmente, si el tema es poder visualizar en un formulario o una vista, una tabla preexistente, numerada secuencialmente, todo esto es totalmente innecesario. bastaría con hacer una numeracion seucuencial que sólo aplique a mostrarlo en ese momento:
Código MySQL:
Ver original
  1. SELECT (@id:=@id+1) ID, a, b, c, d
  2. FROM tabla JOIN (SELECT @id:=0) T
  3. ...

Esto no está completo, hay muchas consideraciones a realizar, pero la información que das es demasiaod escasa para dartye mejores soluciones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 18/06/2014, 11:01
 
Fecha de Ingreso: septiembre-2012
Ubicación: montevideo
Mensajes: 131
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: problema autoincrement

dale gracias estoy tratando de entender la expresion y no lo logrado, estoy tratando.voy a tratar por otro camino, usando es php while p for
  #11 (permalink)  
Antiguo 18/06/2014, 11:31
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: problema autoincrement

Bueno...

Eso lo tendrás que resolver en el Foro de PHP.

Postea allá, eso si, trata de postear en ese caso todo el código del script, no sólo la parte del while, apra que se entienda bien la lógica que usas en eso, y te puedan ayudar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 18/06/2014, 12:11
 
Fecha de Ingreso: septiembre-2012
Ubicación: montevideo
Mensajes: 131
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: problema autoincrement

dale, muchas gracias por tu tiempo.

Etiquetas: campo
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 12:58.