Contacto | #php_para_torpes | Enlázanos | ¿Quiénes somos?
17 usuarios Online (0)
Darse de alta en la web | Recuperar password   
Inicio / Foros / MySQL / Consulta con if en el where
7 respuestas recibidas | 144 visitas | Categoría MySQL

Consulta con if en el where

Avatar de yazo
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 25 posts)

#0 Offline yazo Usuario 05 abr 08 (17:12)  
Hola a todos,

Tengo una tabla que tiene separados el dia, el mes y el año.
Estoy intentando hacer una consulta que me muestre las filas cuya fecha dia, mes, año sea superior a la actual.

Por un lado habría que comprobar que el año y mes son superiores al actual,
por otro lado habría que comprobar en caso de que el año sea igual al actual y el mes sea igual al actual que el día es igual o superior al actual.

Para sacar la fecha actual para compararle había pensado usar date de php.

¿Como lo podría hacer?

Muchas Gracias

Re: Consulta con if en el where

Avatar de turl
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 130 posts)

#1 Offline turl Usuario 05 abr 08 (17:40)  
Pues creo que debería ser algo como

Código PHP


SELECT campo1,campo2 FROM tabla WHERE anio >= $anioactual AND mes >= $mesactual AND dia >= $diaactual;



Espero te sirva ;)

Mis proyectos: LiveYeah! Group (Alpha) - Acortar direcciones interminables con Turl - Hosting Gratis de la mejor calidad en OGameHost

a ver esto

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#2 Offline jurena Usuario 05 abr 08 (18:07)  
La consulta de turl no creo que funcione siempre, pues un mes inferior tuyo no supone una fecha anterior siempre, sino que depende del año. Para hacerlo de ese modo con AND deberías usar muchos IF. Y no creo que haga falta:

Mi primera recomendación es que en MySQL cargues los datos en campos que sean campos apropiados para fecha DATE, DATETIME, YEAR, MONTH, TIMESTAMP, etc. Podrás hacerlo sin dificultad, actualizando con los datos que tienes, y luego podrás comparar todas las fechas sin tener que utilizar ni PHP ni otros recursos de Mysql no pensados realmente para hacer lo que vas a hacer. Y, además, podrás sacar sin dificultad los datos por separado cuando lo necesites.
Aún sin saber en qué tipo de campo has escrito los números correspondientes a año, mes y día (INT, VARCHAR, etc.), y si has puesto 0 o no por delante cuando el dígito es menor que 10, te diré que pruebes esto:
SELECT * FROM fecha WHERE TIMESTAMP(CONCAT (anofecha,'-',mesfecha,'-',diafecha)) > TIMESTAMP(NOW())
Sé que existe str_to_date en MySQL, pero yo no he logrado hacerlo funcionar con nombres de campo.
Con PHP también se puede hacer, pero que los técnicos nos digan si es mejor hacerlo desde MySQL o cargar los tres datos y con varias de sus funciones como mktime. Hay varios POSTs en nuestro foro que tratan cómo hacerlo. Búscalos, creo que alguno de ellos es de MIKE y en él nos explica sus preferencias. Te será muy útil para PHP

Suerte

un pequeño cambio

Avatar de yazo
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 25 posts)

#3 Offline yazo Usuario 06 abr 08 (16:23)  
Muchas Gracias por la respuesta a turl y jurena, ha funcionado correctamente la consulta, pero ahora he modificado un poco la consulta que quiero hacer.

Tengo una tabla con categorias:
id, nombre, anio, ....

La otra tabla son noticias, con los campos anteriormente expuestos:
id, dia, mes, titular, texto, ..., idcategoria.

Me gustaría sacar el nombre de las categorías cuya fecha dia, mes, anio sea superior a la actual.
He probado haciendo una subconsulta con ANY, IN, EXISTS pero no he conseguido nada.

¿Como lo podría hacer?

Muchas Gracias

a ver esto si las relaciones de las tablas ayudan

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#4 Offline jurena Usuario 06 abr 08 (17:37)  
Me dices
Código: Tengo una tabla con categorias:
id, nombre, anio, ....
La otra tabla son noticias, con los campos anteriormente expuestos:
id, dia, mes, titular, texto, ..., idcategoria.

Si idcategoría de noticias es el FK e id de categorias el PK, yo intentaría hacer esto

SELECT c.nombre FROM noticias n INNER JOIN categorias c ON n.idcategoria = c.id WHERE TIMESTAMP(CONCAT (c.anio,'-',n.mes,'-',n.dia)) > TIMESTAMP(NOW())

Creo que esto funcionará, aunque no lo he probado. Prueba tú a ver y ya nos dirás. Si no funciona, probaremos alguna otra cosa

Re: Consulta con if en el where

Avatar de yazo
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 25 posts)

#5 Offline yazo Usuario 06 abr 08 (17:53)  
Ahh, perdona, se me ha olvidado decirte que una categoria puede tener varias noticias y que alguna de ellas tenga fecha pasadas y otras no, si una categoria tiene alguna noticia con una fecha no pasada que muestre dicha categoria.

Gracias por todo.

creo que lo que te he puesto servirá

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#6 Offline jurena Usuario 06 abr 08 (18:16)  
yazo,
lo que te he puesto, creo, te servirá para eso. Pruébalo con tus noticias y categorías. Pero lo que no entiendo es por qué introduces la fecha del año en la tabla categorías. Creo que deberías hacer un campo DATE en noticias e incluir la fecha como 2008/03/28, por ej. , y eliminar esos campos dia, mes, anio. Te evitarías muchos problemas en el futuro.

SOLUCIONADO

Avatar de yazo
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 25 posts)

#7 Offline yazo Usuario 06 abr 08 (18:51)  
SOLUCIONADO!!!

Muchas Gracias por todo jurena

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

Web alojada en Zilos

php-hispano.net 2002 - 2008 | XHTML 1.0
Datos Legales | Webmaster