Foros del Web » Programando para Internet » PHP »

Select de Campo Fecha + 1 Mes

Estas en el tema de Select de Campo Fecha + 1 Mes en el foro de PHP en Foros del Web. Saludos. Tengo con campo DATETIME y quiero hacer un SELECT de todos los registros que tengan en ese campo FECHA una fecha que sea menor ...
  #1 (permalink)  
Antiguo 01/11/2004, 13:42
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 15 años, 11 meses
Puntos: 1
Select de Campo Fecha + 1 Mes

Saludos.

Tengo con campo DATETIME y quiero hacer un SELECT de todos los registros que tengan en ese campo FECHA una fecha que sea menor a esa misma FECHA+1 mes.

Estaba haciendo esto:

query_buscar = "Select * from detalle_compra where id_empleado = '"$id"' and fecha <= '" . DateAdd("m", 1, date()) . "'"

Pero me doi cuenta que eso lo que me trae son los registros en los que la fecha es menor a la fecha actual + 1 mes y en este caso siempre me traera todos los resultados, ya que nunva será una fecha en el futuro la que este guardada en el campo FECHA.

Entonces debría ser algo como:

query_buscar = "Select * from detalle_compra where id_empleado = '"$id"' and fecha <= '" . DateAdd("m", 1, fecha) . "'"

Donde fecha es el nombre del campo DATETIME que contiene la fecha.

Mucho me temo que no lo estoy escribiendo bien, cual sería la forma correcta??

Gracias
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #2 (permalink)  
Antiguo 01/11/2004, 14:54
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 14 años, 5 meses
Puntos: 0
Prueba con la sentencia Add_months
Select * from detalle_compra where id_empleado = '"$id"' and fecha = add_months(sysdate, 1);

donde "sysdate" es la fecha del sistema y 1 es el numero de meses que le quieres añadir
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #3 (permalink)  
Antiguo 02/11/2004, 07:03
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 15 años, 11 meses
Puntos: 1
Ok, pero sysdate es la fecha actual???
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #4 (permalink)  
Antiguo 02/11/2004, 07:32
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,
Cita:
Tengo con campo DATETIME y quiero hacer un SELECT de todos los registros que tengan en ese campo FECHA una fecha que sea menor a esa misma FECHA+1 mes.
¿Podrias traducir esto? Es que una fecha siempre es menor a si misma + 1 mes

¿Esto es codigo o pseudocodigo? Lo digo por falta de $:

query_buscar = "Select * from detalle_compra where id_empleado = '"$id"' and fecha <= '" . DateAdd("m", 1, fecha) . "'"

dateadd() no es una funcion estandard de PHP, no sabemos que valores acepta ni en que formato. Tampoco sabemos que formato y valor tiene fecha. Puede que el codigo este bien, pero no los valores.

Saludos.

PD: Tambien estaria bien saber que base de datos usas, podria usarse funciones de la base de datos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 02/11/2004, 07:58
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 15 años, 11 meses
Puntos: 1
Ok tratere de explicar mejor el asunto.

Cada empleado tiene la opción de comprar 2 productos mensuales. La forma es que pense hacer esa validación es: Busco las compras de X empleado, pero en las que se cumpla lo siguiente: Que la fecha de esa compra realizada sea menor a esa misma fecha + 1 mes. Así me aseguro que no compre mas de 2 productos en un periodo de 1 mes contado desde la fecha de su última compra.

Esta mejor ??
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #6 (permalink)  
Antiguo 02/11/2004, 08:57
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 14 años, 5 meses
Puntos: 0
Cita:
Iniciado por José Molina
Ok, pero sysdate es la fecha actual???
Sysdate es la fecha del sistema, es decir la que tiene tu sistema opertivo que (supongo) todo el mundo la tiene como fecha actual claro
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #7 (permalink)  
Antiguo 02/11/2004, 09:10
 
Fecha de Ingreso: junio-2004
Mensajes: 84
Antigüedad: 13 años, 5 meses
Puntos: 0
Cita:
Tengo con campo DATETIME y quiero hacer un SELECT de todos los registros que tengan en ese campo FECHA una fecha que sea menor a esa misma FECHA+1 mes.
Para hacer eso hace lo siguiente
Código PHP:
$query "SELECT * FROM tabla WHERE fecha < DATE_ADD($fecha, INTERVAL 1 MONTH)";
mysql_query($query); 
__________________
Repositorio de funciones utiles para programadores y administradores
http://www.particle.com.ar
  #8 (permalink)  
Antiguo 02/11/2004, 09:12
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 14 años, 5 meses
Puntos: 0
Ok, creo que quieres algo asi:

Select * count(compra)
from empleados
group by nombre_empleado
having count(compra) <=2
and fecha_compra = Add_months (sysdate, -1);

Count= Cuenta las entradas que tienes de las compras
group by= te agrupa tu busqueda segun el nombre de empleados
Having count(compra) <=2 = Condicion en la que solo te muestra aquellos en los que las compras realizadas sean menor o iguales a 2.
fecha_compra = Add_months (sysdate, -1)= Te indica que ADEMAS de las condiciones de arriba la fecha en la que ha comprado los productos tiene que ser igual a la fecha del sistema (fecha actual) menos un mes.
Nota: tal vez me equivoque ya que no se como estan las tablas ni las columnas.
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #9 (permalink)  
Antiguo 02/11/2004, 09:19
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Cita:
Cada empleado tiene la opción de comprar 2 productos mensuales
¿Meses de calendario? Es decir, si puede comprar 2 el 30 de octubre y otros 2 el 2 de noviembre, pero ninguno mas en octubre o noviembre. Porque en este caso no han pasado 30 dias entre las compras de octubre y las de noviembre, pero si se ha pasado de mes. Haciendo la comparacion +1 mes, estas sumando 30 dias.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 02/11/2004, 11:37
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 15 años, 11 meses
Puntos: 1
Uhmm ok. Esta buena la participación.

Detallo más.

Si, efectivamente un empleado X compra el 29 de octubre sus 2 productos. Este empleado X no podrá vovler a comprar sino hasta el 29 de noviembre. Es decir 30 días despues de su última fecha de compra.

kavalerian: No puedo usar "sysdate" porque me da la fecha actual y yo quiero la fecha del campo fecha + 30 dias

eqsoftware: el query que me planteas esta bien, pero $fecha, como tu la llamas es el valor que esta en el campo fecha de la misma Tabla.

En todo caso, como lo haría normalmente sería algo asi:

Código PHP:
$query "Select * from TABLA where id_empleado = $id"

$ejecutar_sql mysql_query($query);
if (
mysql_num_rows($ejecutar_sql)>0) {
    while(
$fila mysql_fetch_array($ejecutar_sql)) {
              
$fecha_compra $fila["fecha"];
              if (
$fecha_compra <= Add_months($fecha_compra1)) {
                 
$cuento++;
              }
          }
}

if (
$cuento "2") {
   
//Dejo comprar
}else{
   
//No dejo comprar

__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.

Última edición por José Molina; 02/11/2004 a las 11:39
  #11 (permalink)  
Antiguo 02/11/2004, 12:24
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Código PHP:
if ($fecha_compra <= Add_months($fecha_compra1)) { 
Esa condicion siempre se cumple, ya que es lo mismo que 3 <= 2+1.

Veamos cambiando la logica. Tu lo que quieres es saber son las compras en el ultimo periodo de 30 dias. Entonces, usando MySQL, deberia ser:

SELECT count(*) FROM tabla WHERE fecha >= DATE_SUB(now(), INTERVAL 1 MONTH) AND id_empleado=1

Seria hacer unos ajustes, pero basicamente es eso: sacar las compras realizadas desde hace menos de un mes. Tambien podrias hacer (fecha_actual - fecha_compra) <= 30 dias.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #12 (permalink)  
Antiguo 02/11/2004, 12:51
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 14 años, 5 meses
Puntos: 0
Si, estoy muy deacuerdo con josemi.
Uffff, cuanto me queda por aprender!!!!!!!!!!
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #13 (permalink)  
Antiguo 02/11/2004, 14:30
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 15 años, 11 meses
Puntos: 1
Ok Josemi a ver si entendi.

Allí me voy a traer todas las compras del empleado 1 en las que la fecha de su última compra este entre los 30 días contados desde la fecha actual??

Porque si es así, eso nunca se va a cumplir, porque si el empleado compro ayer, y esa compra fue su segunda en los últimos 30 días, mañana no podrá comprar nuevamente.

Al ejecutar tu query, me traera las 2 compras, pero nunca serán mayores a la fecha actual (en el intervalo de 1 mes)

Bueno así lo entiendo. Me equivoco??
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.

Última edición por José Molina; 02/11/2004 a las 14:32
  #14 (permalink)  
Antiguo 02/11/2004, 22:30
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Totalmente de acuerdo con josemi.
Lo que tienes que hacer es una consulta que te devuelva la cantidad de compras que el usuario ha hecho en los últimos 30 días. Si son más de una, ya no lo dejas comprar. Si es una o menos, lo dejas comprar.
Código PHP:
$sql "SELECT COUNT(*) FROM tabla WHERE fecha >= DATE_SUB(now(), INTERVAL 1 MONTH) AND id_empleado=$id";
$result mysql_query($sql) or die(mysql_error());
$cantidad mysql_result($result,0);
if(
$cantidad 1){
  
//no permites la compra
}else{
  
//sí permites la compra

Sólo he completado un poco el proceso... pero la consulta es la misma que te puso josemi.

Saludos
  #15 (permalink)  
Antiguo 03/11/2004, 03:07
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Cita:
Iniciado por José Molina
Ok Josemi a ver si entendi.

Allí me voy a traer todas las compras del empleado 1 en las que la fecha de su última compra este entre los 30 días contados desde la fecha actual??

Porque si es así, eso nunca se va a cumplir, porque si el empleado compro ayer, y esa compra fue su segunda en los últimos 30 días, mañana no podrá comprar nuevamente.

Al ejecutar tu query, me traera las 2 compras, pero nunca serán mayores a la fecha actual (en el intervalo de 1 mes)

Bueno así lo entiendo. Me equivoco??
Veamos a ver si me aclaro. ¿Cuando puede tu empleado realizar otra compra? Por lo que te he entendido, un empleado puede comprar hoy cuando en los 30 dias anteriores a hoy solo ha realizado una compra.
Cita:
Porque si es así, eso nunca se va a cumplir, porque si el empleado compro ayer, y esa compra fue su segunda en los últimos 30 días, mañana no podrá comprar nuevamente.
Depende de si han pasado mas de 30 dias desde la primera de esas 2 compras.

Creo que soy incapaz de verlo. ¿Podrias poner ejemplos con fechas de casos donde si pueda comprar y donde no pueda comprar? Ademas, te serviran como test para la solucion final.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #16 (permalink)  
Antiguo 03/11/2004, 09:45
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 15 años, 11 meses
Puntos: 1
Jejeje caramba, yo creo que recien entiendo lo que me dicen.

Es buscar las compras en el periodo de 30 dias hacia atras, tomando como referencia la fecha actual. Claro.

Si bueno, si alguien compra el 01-08-04 y despues compra el 15-08-04 debería poder comprar de nuevo el 01-09-04

Gracias
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
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 22:46.