Ver Mensaje Individual
  #5 (permalink)  
Antiguo 04/04/2013, 11:40
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Solucion a llamar funcion como alias en clausula where

Hola jolie_girl:

Mucho cuidado con tus comentarios a las personas que te responden en el foro...

Cita:
Usa mas tu imaginación gnsoloyo, mi pregunta fue demasiado simple otravez, pero bueno si me quieres ayudar mucho mas te dare toda mi información , aver si puedes solucionarlo de una mejor manera,:
Una cosa es usar la imaginación y otra muy distinta es tratar de jugar al adivino no lo crees???

En realidad, no te enfocas en un solo problema, comienzas hablando de una cosas y terminas planteando algo complétamente distinto...

vayamos por partes:

Código:
eso esta mall aparte incompleto pero bueno.........porque suponiendo que me trae un dia 30 de marzo pues le sumara 7 y dara 37
A qué te refieres con que te dará 37??? si estás manejando fechas, la función date_add, funciona perfectamente, te daría la fecha correcta, sin tener que hacer ningún calculo extra:

Código MySQL:
Ver original
  1. mysql> set @curdate = '2013-04-30';
  2. Query OK, 0 rows affected (0.07 sec)
  3.  
  4. +------------+------------------------------------+
  5. +------------+------------------------------------+
  6. | 2013-04-30 | 2013-05-07                         |
  7. +------------+------------------------------------+
  8. 1 row in set (0.01 sec)

Observa, esto colocando como fecha actual (@curdate = '2013-04-30'), si le agrego 7 días, no me regresa el 37 de abril como tal vez pudieras estár suponiendo, sino que me regresa como fecha el 7 de Mayo, lo cual es correcto:

Segundo, en las condiciones WHERE... creo que te estás equivocando, si quieres obtener los registros cuya fecha de vencimiento sea en una semana, deberías hacer algo como esto:

Código:
WHERE 
siguientepago(campo,curdate(),campo) 
between curdate() and date_add(curdate(), interval 7 day)
es decir, traeria todos los registros que vencen hoy y dentro de los siguientes 7 días... si quieres traer sólo los que vencen dentro de una semana simplemente cambias el between por una condición así

Código:
WHERE 
siguientepago(campo,curdate(),campo) = date_add(curdate(), interval 7 DAY)
Lo mismo pasa para las quincenas:

Código:
WHERE 
siguientepago(campo,curdate(),campo) = date_add(curdate(), interval 2 WEEK)
o para el mes:

Código:
WHERE 
siguientepago(campo,curdate(),campo) = date_add(curdate(), interval 1 MONTH)
Debes tener cuidado simplemente con el manejo de los intervalos no es lo mismo agregar un mes a agregar 30 o 31 días... ¿por qué? observa este ejemplo:

supongamos que tienes una fecha 31 de enero, y le agregas 1 MES, ¿cuál crees que debería ser el resultado?

Código MySQL:
Ver original
  1. mysql> set @curdate = '2013-01-31';
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. +------------+--------------------------------------+
  5. +------------+--------------------------------------+
  6. | 2013-01-31 | 2013-02-28                           |
  7. +------------+--------------------------------------+
  8. 1 row in set (0.00 sec)

Observa que el resultado no es el mismo si agregas 30 días:

Código MySQL:
Ver original
  1. +------------+-------------------------------------+
  2. +------------+-------------------------------------+
  3. | 2013-01-31 | 2013-03-02                          |
  4. +------------+-------------------------------------+
  5. 1 row in set (0.00 sec)

Saludos
Leo