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

Consulta con if en el where

Estas en el tema de Consulta con if en el where en el foro de Mysql en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 05/04/2008, 08:44
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Consulta con if en el where

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
  #2 (permalink)  
Antiguo 05/04/2008, 09:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: Consulta con if en el where

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())

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.

Suerte
  #3 (permalink)  
Antiguo 06/04/2008, 08:21
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Re: Consulta con if en el where

Muchas Gracias por la respuesta 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
  #4 (permalink)  
Antiguo 06/04/2008, 09:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: Consulta con if en el where

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.
  #5 (permalink)  
Antiguo 06/04/2008, 09:53
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Re: Consulta con if en el where

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.
  #6 (permalink)  
Antiguo 06/04/2008, 10:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: Consulta con if en el where

Creo que te valdrá lo anterior,
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())
pero lo que no entiendo es por qué el año lo introduces en la tabla categorías, cuando, según creo, debería estar en la tabla noticias; es más, creo que deberías hacer un campo DATE en el que introducirías la fecha 2008/03/25, por ej., y que te permitiría eliminar los campos mes, dia y anio de las dos tablas.
Creo que sería lo más recomendable y tampoco costaría mucho hacer el cambio mediante un UPDATE bien elaborado y probado previamente en un duplicado de las tablas para ver el resultado...
  #7 (permalink)  
Antiguo 06/04/2008, 10:51
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años
Puntos: 3
Re: Consulta con if en el where

SOLUCIONADO!!!

Muchas Gracias por todo jurena
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 11:23.