Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Id por rango de fechas con php

Estas en el tema de Id por rango de fechas con php en el foro de PHP en Foros del Web. ¡Hola a todos! Agradecería que pudieran darme una mano con la generación de id para mis tablas. El campo idProducto es int(4) "No uso auto ...
  #1 (permalink)  
Antiguo 05/11/2015, 13:07
 
Fecha de Ingreso: octubre-2015
Ubicación: Puebla, Puebla
Mensajes: 12
Antigüedad: 8 años, 6 meses
Puntos: 0
Id por rango de fechas con php

¡Hola a todos!
Agradecería que pudieran darme una mano con la generación de id para mis tablas.
El campo idProducto es int(4) "No uso auto incremento".

La generación del id es por medio de php con la siguiente consulta:
$consulta="SELECT max(idProducto) AS maximo FROM sisProducto";
$rs = mysql_query($consulta,$conexion);
$ptr = mysql_fetch_array($rs);
if ($ptr['maximo'] == null){
$idProducto = 1;
}
else{
$idProducto = $ptr['maximo'] + 1;
}

con esta consulta me genera id = 1,2,3.... Así solo podría tener una entrada máxima de 9999 productos, lo que busco hacer es que los id los genere de acuerdo al año en el que estamos por ejemplo: 20151,20152...20153...20161,20162... etc.
¿Cómo puedo realizar eso?
Se los agradezco de ante mano :)
*PD: Ya se que debo cambiar el tamaño del entero en la BD :P
  #2 (permalink)  
Antiguo 05/11/2015, 13:47
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Id por rango de fechas con php

Puedes tomar el año actual mediante la función date() y el parámetro "Y".

Código PHP:
Ver original
  1. date('Y');

Lee la documentación respectiva para que aprendas más sobre los usos que puedes darle.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 05/11/2015, 13:50
 
Fecha de Ingreso: octubre-2015
Ubicación: Puebla, Puebla
Mensajes: 12
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Id por rango de fechas con php

si gracias ya tengo el año, pero ahora como hago para que al año le agregue el numero de id y me salga en un formato 20151 o 2015-1 o algo similar?
  #4 (permalink)  
Antiguo 05/11/2015, 14:25
Avatar de gonzaherrera77  
Fecha de Ingreso: noviembre-2015
Mensajes: 60
Antigüedad: 8 años, 5 meses
Puntos: 7
Respuesta: Id por rango de fechas con php

Entonces vos queres que el id del producto sea 2015-1, podrias dibujar la tabla como la quieres organizada para darme un poco mas de idea y ayudarte es decir. EJ

ID|Producto|Fecha
1 Botella 5/11/2015
1 Rueda 1/1/2016

¡Saludos!
  #5 (permalink)  
Antiguo 05/11/2015, 14:37
 
Fecha de Ingreso: octubre-2015
Ubicación: Puebla, Puebla
Mensajes: 12
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Id por rango de fechas con php

Actualmente es así:
+-----------+----------------------+----------------+
|idProducto| descripcion| idClasificacion|
+-----------+----------------------+----------------+
| 1| Acetatos| 1|
+-----------+----------------------+----------------+
| 2| Archivero de cartón| 1|
+-----------+----------------------+----------------+

pero quisiera que mi idProducto fuera de esta manera (año-numero) = (2015-1, 2015-2)
mi código es el siguiente:
Código PHP:
Ver original
  1. $consulta="SELECT max(idProducto) AS maximo FROM sisProducto";
  2.   $rs = mysql_query($consulta,$conexion);
  3.   $ptr = mysql_fetch_array($rs);
  4.   if ($ptr['maximo'] == null){
  5.     $idProducto = 1;
  6.   }
  7.   else{
  8.     $idProducto = $ptr['maximo'] + 1;
  9.   }
Lo que no se es como combinar el valor de date('Y') con el $ptr
te agradezco :)
  #6 (permalink)  
Antiguo 05/11/2015, 14:52
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Id por rango de fechas con php

Hola JEMG002,

Estoy seguro de que sabes concatenar variables, por si no lo habías pensado, creo que por ahí van los tiros.

Código PHP:
Ver original
  1. $idProducto = date(Y)."-".$ptr['maximo'] + 1;

Lo hago sin probar ni nada, pero creo que es así, espero que te sirva.
  #7 (permalink)  
Antiguo 05/11/2015, 14:55
 
Fecha de Ingreso: octubre-2015
Ubicación: Puebla, Puebla
Mensajes: 12
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Id por rango de fechas con php

ya lo había intentado así pero me da error xD
  #8 (permalink)  
Antiguo 05/11/2015, 23:55
Avatar de gonzaherrera77  
Fecha de Ingreso: noviembre-2015
Mensajes: 60
Antigüedad: 8 años, 5 meses
Puntos: 7
Respuesta: Id por rango de fechas con php

Proba esto

Código PHP:
Ver original
  1. $consulta="SELECT max(idProducto) AS maximo FROM sisProducto";
  2.   $rs = mysql_query($consulta,$conexion);
  3.   $ptr = mysql_fetch_array($rs);
  4. $year = date('Y');
  5.  
  6. if (is_null($ptr['maximo'])){
  7.   $idProducto = 1;
  8.   $idProducto = $year.'-'.$idProducto;
  9. }
  10. else{
  11.   $idProducto = $ptr['maximo']++;
  12.   $idProducto = $year.'-'.$idProducto;
  13. }

Y se te da un error, mostranos el error.

¡Saludos!
  #9 (permalink)  
Antiguo 06/11/2015, 01:43
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Id por rango de fechas con php

[OFF-TOPIC]

También puedes hacerlo con código SQL puro:

Código MySQL:
Ver original
  1. INSERT INTO tabla (campo) VALUES (
  2.     IF ((SELECT COUNT(*) FROM tabla AS alias1) > 0 AND SUBSTRING((SELECT campo FROM tabla AS alias2 ORDER BY campo DESC LIMIT 1), 1, 5) = YEAR(CURDATE()),
  3.         CONCAT(
  4.             YEAR(CURDATE()),
  5.             '-',
  6.             CONVERT(
  7.                 SUBSTRING((SELECT campo FROM tabla AS alias3 ORDER BY campo DESC LIMIT 1), 6),
  8.                 UNSIGNED INTEGER
  9.             ) + 1
  10.         ),
  11.         CONCAT(YEAR(CURDATE()), '-', 1)
  12.     )
  13. )

Ahora, la explicación. En el espacio del valor a insertar, evalúo una condición. Si hay registros en la tabla (más de cero) y el año del último registro guardado es igual al año de la fecha actual, guardo el resultado de concatenar al año de la fecha actual con un guion y el valor que se encuentra a la derecha del guion del último registro guardado (ubicado en la posición 6 de dicho registro), al cual convierto a entero para sumarle uno. De esta manera, se convierte en el siguiente registro con respecto al último guardado, siempre dentro del mismo año. En el caso de que la condición no se cumpla, es decir, de que la tabla esté vacía o de que el año del último registro no coincida con el año actual (lo cual quiere decir que ya estamos en un nuevo año), guardo el resultado de concatenar al año de la fecha actual con un guion y el número 1. Para esta segunda parte, si fuera el primer caso, en el que la tabla estuviera vacía, se convertiría en el primer registro de la tabla, y si fuera el segundo caso, en el que nos encontramos en un nuevo año, se convertiría en el primer registro del año. De esta forma, quedan cubiertos todos los posibles casos.

La estructura de la condición es la siguiente:

Código MySQL:
Ver original
  1. IF (condición, verdadero, falso)

Para este ejemplo utilicé las siguientes funciones:
  • COUNT(): Devuelve la cantidad de registros en la tabla para el campo especificado. Si se le pasa un asterisco (*) como argumento, se tomará en cuenta a todos los campos.
  • CONCAT(): Permite concatenar valores.
  • CURDATE(): Devuelve la fecha actual.
  • YEAR(): Devuelve el año de la fecha pasada como parámetro.
  • CONVERT(): Devuelve el valor pasado como argumento convertido al tipo especificado como segundo parámetro.
  • SUBSTRING(): Toma una parte de una cadena, la cual se pasa como primer argumento, siendo el segundo la posición de la cadena desde la cual se tomará la porción. Puede haber un tercer argumento para definir la posición final de la porción. Las posiciones se empiezan a contar desde el 1.

Como el valor a guardar poseerá un guion, el campo ya no puede seguir siendo de tipo entero; debe ser de tipo cadena. Asigno diferentes alias a la tabla en las subconsultas para evitar conflictos con la sentencia principal. Si no lo haces así, se producirá el error #1093, el cual ocurre cuando se intenta consultar una tabla que está siendo modificada, como sucede en los casos de inserción, actualización y eliminación de datos.

Para mayores detalles, consulta el manual.

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 07/11/2015 a las 19:35 Razón: Enlaces y mejora
  #10 (permalink)  
Antiguo 06/11/2015, 12:17
 
Fecha de Ingreso: octubre-2015
Ubicación: Puebla, Puebla
Mensajes: 12
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Id por rango de fechas con php

Alexis88 Gracias por tu respuesta, me funciono perfecto... :)
¡saludos!

Etiquetas: Ninguno
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 14:58.