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

[SOLUCIONADO] asignar numero a lista de registros

Estas en el tema de asignar numero a lista de registros en el foro de Mysql en Foros del Web. Tengo un tabla con estos campos que son codigo nombre fecha_caducidad y estan ordenados por fecha de caducidad de esta forma: codigo -- nombre ------ ...
  #1 (permalink)  
Antiguo 13/02/2013, 13:27
 
Fecha de Ingreso: febrero-2013
Mensajes: 26
Antigüedad: 11 años, 2 meses
Puntos: 0
asignar numero a lista de registros

Tengo un tabla con estos campos que son codigo nombre fecha_caducidad y estan ordenados por fecha de caducidad de esta forma:
codigo -- nombre ------ fecha_caducidad tipo
yo9 -- yogurth_lala --- 12-01-2013 --- lacteos
le5 -- leche_lala --- 15-01-2013 --- lacteos
qu23 ---queso --- 01-02-2013 --- lacteos


pero ahora me pidieron que estos registros que ya tengo se les aumente un campo donde se almacene una numeracion quedando asi

num ---codigo --- nombre --- fecha_caducidad --- tipo
1--- yo9 ---yogurth_lala--- 12-01-2013 ---lacteos
2 ---le5 ---leche_lala--- 15-01-2013--- lacteos
3--- qu23 ---queso --- 01-02-2013 ---lacteos

lo hice con un contador pero solo lo muestra en pantalla y al ingresar otro recorre los numeros y no lo almacena en un campo(mi idea es copiar el numero en el campo num).Pensaran como yo que esta de mas colocarlo pero asi me lo exigen y ni modo

esta es la consulta que hago para obtener la lista no se si sirva de algo:

Código MySQL:
Ver original
  1. SELECT  (@rnum := @rnum +1)AS x, num, nombre, codigo, f_c , tipo
  2. FROM tabla, (SELECT @rnum :=0)x

Última edición por gnzsoloyo; 13/02/2013 a las 15:03 Razón: Mal etiquetado.
  #2 (permalink)  
Antiguo 13/02/2013, 15:04
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, 4 meses
Puntos: 2658
Respuesta: asignar numero a lista de registros

No se puede hacer sin alterar la tabla y poner un autoincremental, o bien un campo INT UNSIGNED y realizar un UPATE masivo.
La pregunta sería ¿Cuál es el objetivo que quieren cubrir para necesitar esa numeración? ¿Exactamente cuál va a ser su uso?
¿Se los preguntaste?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 13/02/2013, 16:12
 
Fecha de Ingreso: febrero-2013
Mensajes: 26
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: asignar numero a lista de registros

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No se puede hacer sin alterar la tabla y poner un autoincremental, o bien un campo INT UNSIGNED y realizar un UPATE masivo.
La pregunta sería ¿Cuál es el objetivo que quieren cubrir para necesitar esa numeración? ¿Exactamente cuál va a ser su uso?
¿Se los preguntaste?
mi idea era si no se puede copiar el numero que genero con la consulta y pasarlo al campo nuevo.No se si exista otra opcion .Lo que pasa que este numero les servira para reconocer de manera mas facil un pruducto por eso el hecho de almacenarlo y ellos lo etiquetan con ese numero y no su codigo.espero y me entiendan
  #4 (permalink)  
Antiguo 13/02/2013, 16:26
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, 4 meses
Puntos: 2658
Respuesta: asignar numero a lista de registros

Eso sería una PK alternativa, o clave candidata.
No tiene ningún sentido, a menos que tengan en cuenta que pueden generar inconsistencias peligrosas en el sistema, al mantener una doble identificación.
¿Por qué razón quieren crear una clave diferente a la del código de producto?
Si alguien en mi empresa plantease semejante cosa, se ganaría buenos problemas, y los supervisores de analistas funcionales lo mandarían a pasear sin más trámite.

Sería mejor que pidas la justificación por escrito con un buen análisis preliminar de las ventajas que ellos dicen que le reportaría, a fin de evitar problemas ulteriores.

Entiende que el tema no es que no se pueda hacer. Es que no se debe hacer.
Si ya tienes una PK definida, no hay ninguna razón para crear otra.
__________________
¿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 13/02/2013, 19:49
 
Fecha de Ingreso: febrero-2013
Mensajes: 26
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: asignar numero a lista de registros

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Eso sería una PK alternativa, o clave candidata.
No tiene ningún sentido, a menos que tengan en cuenta que pueden generar inconsistencias peligrosas en el sistema, al mantener una doble identificación.
¿Por qué razón quieren crear una clave diferente a la del código de producto?
Si alguien en mi empresa plantease semejante cosa, se ganaría buenos problemas, y los supervisores de analistas funcionales lo mandarían a pasear sin más trámite.

Sería mejor que pidas la justificación por escrito con un buen análisis preliminar de las ventajas que ellos dicen que le reportaría, a fin de evitar problemas ulteriores.

Entiende que el tema no es que no se pueda hacer. Es que no se debe hacer.
Si ya tienes una PK definida, no hay ninguna razón para crear otra.
No quiero sonar terco pero si le quiero dar solucion a las exigencias que me dicen y no registro el codigo (ya que dicen que es mas dificil identificarlos) solo los ordeno por la fecha y los enumero como dije en un campo nuevo nadamas seria una pk como lo haria....
  #6 (permalink)  
Antiguo 14/02/2013, 01:18
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: asignar numero a lista de registros

si tienes que hacerlo por exigencia del guión o de quien paga y puesto que se trata de productos (no tendrás mucho movimiento de eso, pienso, y además el código es clave primaria por lo que dices, es decir, que no se repiten), yo haría lo siguiente:
crearía otra tabla llamada orden con los siguientes campos
num, codigo
num sería auto_increment y clave primaria, y codigo, el mismo campo de tu codigo de tabla principal.
Cada vez que añadas, elimines o cambies un codigo, haces mediante programación un truncate de la nueva tabla orden e insertas ordenados por fecha de caducidad (que parece ser lo que quieres, aunque si es por fecha de ingreso del producto deberías añadir a la tabla principal un campo timestamp de entrada de dato y ordenar por eso) todos los códigos de la tabla principal, verás que se numeran automáticamente, sin programación. Luego para ver el número correspondiente un inner join entre la tabla principal y esta tabla de orden te permitirá siempre mostrar el número sin tener que poner en riesgo la tabla principal. Pega, debes truncar y rellenar por completo esa tabla orden cada vez que eliminas, actualizas o insertas un producto en la tabla principal, algo que tal vez no ocurrirá muchas veces.
Si no existe un criterio para el orden, o el criterio es el momento de almacenamiento, un campo timestamp te bastaría para reordenar y hacer lo que te digo; si el orden es el de fecha de caducidad, que no creo, harías lo que te dije en primer lugar. Pero deben explicarte, como te han dicho, las razones y el criterio. Piensa que la fecha de caducidad de un producto no es del producto en sí, sino de una partida de ese producto; cuando entre una nueva partida, la fecha de caducidad será distinta... Acláranos con ejemplos estas cuestiones.

Última edición por jurena; 14/02/2013 a las 05:13
  #7 (permalink)  
Antiguo 14/02/2013, 09:07
 
Fecha de Ingreso: febrero-2013
Mensajes: 26
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: asignar numero a lista de registros

Cita:
Iniciado por jurena Ver Mensaje
si tienes que hacerlo por exigencia del guión o de quien paga y puesto que se trata de productos (no tendrás mucho movimiento de eso, pienso, y además el código es clave primaria por lo que dices, es decir, que no se repiten), yo haría lo siguiente:
crearía otra tabla llamada orden con los siguientes campos
num, codigo
num sería auto_increment y clave primaria, y codigo, el mismo campo de tu codigo de tabla principal.
Cada vez que añadas, elimines o cambies un codigo, haces mediante programación un truncate de la nueva tabla orden e insertas ordenados por fecha de caducidad (que parece ser lo que quieres, aunque si es por fecha de ingreso del producto deberías añadir a la tabla principal un campo timestamp de entrada de dato y ordenar por eso) todos los códigos de la tabla principal, verás que se numeran automáticamente, sin programación. Luego para ver el número correspondiente un inner join entre la tabla principal y esta tabla de orden te permitirá siempre mostrar el número sin tener que poner en riesgo la tabla principal. Pega, debes truncar y rellenar por completo esa tabla orden cada vez que eliminas, actualizas o insertas un producto en la tabla principal, algo que tal vez no ocurrirá muchas veces.
Si no existe un criterio para el orden, o el criterio es el momento de almacenamiento, un campo timestamp te bastaría para reordenar y hacer lo que te digo; si el orden es el de fecha de caducidad, que no creo, harías lo que te dije en primer lugar. Pero deben explicarte, como te han dicho, las razones y el criterio. Piensa que la fecha de caducidad de un producto no es del producto en sí, sino de una partida de ese producto; cuando entre una nueva partida, la fecha de caducidad será distinta... Acláranos con ejemplos estas cuestiones.

Voy a intentar resumir todo y espero y me ayuden en la parte que les digo:
supongamos que nadamas tengo codigo fecha y lo que quiero es que estos productos se ordenen por fechade caducidad ,una vez ordenados no se si se pueda asignarles un numero como se dice de bajadita(1...2...3...4...5) y guardarlo en un campo ("num" este campo si lo ocupare despues) y nada mas.Ya no se agregaran mas productos ni se modificaran es por eso que se les va asignar un numero para su facil identificacion y asi ellos etiquetan los productos con ese numero y no el codigo que es largo.no se si me explico.

  #8 (permalink)  
Antiguo 14/02/2013, 10:46
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, 4 meses
Puntos: 2658
Respuesta: asignar numero a lista de registros

1) Crea el campo que necesitas, supongamos "NUM".
2) Crea una tabla temporal, usando la lógica de tu propia consulta, tal que recuperes los verdaderos identificadores, junto con el código fabricado y ficticio:

Código MySQL:
Ver original
  1. CREATE TEMPORARY TABLE tablatemporal
  2. SELECT  (@rnum := @rnum +1) idNum, codigo
  3. FROM tabla, (SELECT @rnum :=0) x
3) Usa la tabla temporal como referencia para haer el UPDATE:
Código MySQL:
Ver original
  1. UPDATE tabla t, tablatemporal t2
  2. SET num = idnum
  3. WHERE T.codigo = t2.codigo;

Nota importante: todas las acciones deben hacerse manualmente en una única sesión de MySQL, o no funcionará la tabla TEMPORARY.

Finalmente:

4) Aclárales a los que te hicieron este pedido que lo que ellos quieren se considera una pésima práctica en el diseño y administración de bases de datos. Y que cualquier uso diferente al indicado de esos códigos inventados puede, eventualmente, generar problemas de consistencia e integridad de datos.
Eso, al menos, puedo asegurártelo.
__________________
¿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 14/02/2013, 17:43
 
Fecha de Ingreso: febrero-2013
Mensajes: 26
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: asignar numero a lista de registros

Cita:
Iniciado por gnzsoloyo Ver Mensaje
1) Crea el campo que necesitas, supongamos "NUM".
2) Crea una tabla temporal, usando la lógica de tu propia consulta, tal que recuperes los verdaderos identificadores, junto con el código fabricado y ficticio:

Código MySQL:
Ver original
  1. CREATE TEMPORARY TABLE tablatemporal
  2. SELECT  (@rnum := @rnum +1) idNum, codigo
  3. FROM tabla, (SELECT @rnum :=0) x
3) Usa la tabla temporal como referencia para haer el UPDATE:
Código MySQL:
Ver original
  1. UPDATE tabla t, tablatemporal t2
  2. SET num = idnum
  3. WHERE T.codigo = t2.codigo;

Nota importante: todas las acciones deben hacerse manualmente en una única sesión de MySQL, o no funcionará la tabla TEMPORARY.

Finalmente:

4) Aclárales a los que te hicieron este pedido que lo que ellos quieren se considera una pésima práctica en el diseño y administración de bases de datos. Y que cualquier uso diferente al indicado de esos códigos inventados puede, eventualmente, generar problemas de consistencia e integridad de datos.
Eso, al menos, puedo asegurártelo.

Me funciono de maravilla ,muchas gracias de la que me salvaste y si pienso lo mismo que tu pero asi lo quieren ni modo ,gracias
  #10 (permalink)  
Antiguo 14/02/2013, 19:03
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, 4 meses
Puntos: 2658
Respuesta: asignar numero a lista de registros

Los usuarios de la empresa en que trabajo también suelen pedir absurdos. Peor si no les pones un límite terminarás dañando el sistema.
En algún momento hay que decirles no.

O tarde o temprano tendrás ocasión de decirles "Yo se los advertí..."
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: lista, numero, php, registro, registros, select, tabla
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 01:11.