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

Mezclar php en una consulta

Estas en el tema de Mezclar php en una consulta en el foro de Bases de Datos General en Foros del Web. Hola a todos, quería preguntaros una duda sobre mezclar operaciones de PHP sobre una consulta SQL. Imaginad esto: Código PHP: $consulta = "SELECT * FROM clientes WHERE calculophp(Fecha)>365;  donde Fecha ...
  #1 (permalink)  
Antiguo 11/11/2010, 11:33
Avatar de kanakis  
Fecha de Ingreso: octubre-2008
Mensajes: 69
Antigüedad: 16 años, 1 mes
Puntos: 0
Mezclar php en una consulta

Hola a todos, quería preguntaros una duda sobre mezclar operaciones de PHP sobre una consulta SQL.

Imaginad esto:
Código PHP:
$consulta="SELECT * FROM clientes WHERE calculophp(Fecha)>365; 
donde Fecha es un campo de mi tabla tipo "date" con formato (aaaa-mm-dd) y calculophp($fecha) es una función en php que devuelve la diferencia en dias de timestamp entre la fecha obtenida en mysql y la fecha actual. Si ese valor es superior a 365 dias, lo selecciono.

Lo sé, es una burrada intentar hacer eso. Lo que os pregunto es si hay alguna forma de operar directamente sobre la consulta sin tener que evaluarla primero y después hacer otra consulta con los resultados que cumplan la condición.

No es la primera vez que me enfrento a problemas de este tipo y me ahorraría mucho tiempo encontrar algún atajo :D

¿Qué se os ocurre? Un saludo.
  #2 (permalink)  
Antiguo 11/11/2010, 12:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Mezclar php en una consulta

Si lo que quieres es una consulta que te devuelva registros si el campo "FECHA" de ese mismo tiene más de 365 días de diferencia con la fecha actual (infiero que eso es lo que hace tu función en PHP, te podrás imaginar que MySQL ya cuenta con esas capacidades en el mismo SQL:
Código MySQL:
Ver original
  1. FROM clientes
  2. WHERE TIMESTAMPDIFF(DAY, Fecha, CURDATE()))>365;

O bien, si quieres que calcule directamente un año:
Código MySQL:
Ver original
  1. FROM clientes
La única condición que tiene es que los tipos de datos deben ser iguales, es decir, si FECHA es un DATE, debe compararse con un CURDATE() que es el DATE actual. Si "FECHA" fuese un DATETIME debe previamente ser convertido a DATE, porque de lo contrario tomará también las horas en cuenta para realizar el cálculo.
Esto implica que esta comparación da falso:
Código MySQL:
Ver original
  1. SELECT TIMESTAMPDIFF(YEAR, '2010-11-09 20:45:00', '2011-11-09 20:44:59')>0 RESULTADO
Y esta da verdadero:
Código MySQL:
Ver original
  1. SELECT TIMESTAMPDIFF(YEAR, '2010-11-09 20:45:00', '2011-11-09 20:45:00')>0 RESULTADO

Veamos:
Código MySQL:
Ver original
  1. mysql> SELECT TIMESTAMPDIFF(YEAR, '2010-11-09 20:45:00', '2011-11-09 20:44:59')>0 RESULTADO;
  2. +-----------+
  3. | RESULTADO |
  4. +-----------+
  5. |         0 |
  6. +-----------+
  7. 1 row in set (0.00 sec)
  8.  
  9. mysql> SELECT TIMESTAMPDIFF(YEAR, '2010-11-09 20:45:00', '2011-11-09 20:45:00')>0 RESULTADO;
  10. +-----------+
  11. | RESULTADO |
  12. +-----------+
  13. |         1 |
  14. +-----------+
  15. 1 row in set (0.00 sec)

Como puedes apreciar, si los datos son DATETIME, un segundo es importante para el resultado...
__________________
¿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 12/11/2010, 04:46
Avatar de kanakis  
Fecha de Ingreso: octubre-2008
Mensajes: 69
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Mezclar php en una consulta

Muy ilustrativo, gnzsoloyo! No sabía que SQL tenía esa capacidad. Tomo nota, muchas gracias
  #4 (permalink)  
Antiguo 12/11/2010, 05: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: 17 años
Puntos: 2658
Respuesta: Mezclar php en una consulta

Me alegro que te sirviera.

Toma nota de este link para ver las funciones que puedes usar en MySQL. Los demás DBMS tienen su propio conjunto de funciones, aunque algunas son universales y otras llevan el mismo nombre y se implementan diferente: MySQL :: 12 Funciones y operadores
__________________
¿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: mezclar, php
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 10:13.