Ver Mensaje Individual
  #6 (permalink)  
Antiguo 14/02/2013, 01:18
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 10 meses
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