Foros del Web » Programando para Internet » PHP »

Consulta complicada a MYSQL

Estas en el tema de Consulta complicada a MYSQL en el foro de PHP en Foros del Web. Hola amigos, Necesito mostrar de una BD MYSQL las filas de una tabla que, entre otros datos, tiene la fecha divida en "dia", "mes" y ...
  #1 (permalink)  
Antiguo 19/09/2005, 07:07
Avatar de sty
sty
 
Fecha de Ingreso: octubre-2003
Mensajes: 116
Antigüedad: 20 años, 5 meses
Puntos: 1
Consulta complicada a MYSQL

Hola amigos,
Necesito mostrar de una BD MYSQL las filas de una tabla que, entre otros datos, tiene la fecha divida en "dia", "mes" y "año" (sí, no está unida), quiero que muestre las filas que tienen la fecha actual y posteriores. Hasta un máximo de 10.
Lo único que consigo es mostrar esos 10 registros por ID, pero la ID no está ordenada por fecha. O mostrar los registros de la fecha actual (en la que el usuario visita la página), pero no lo que yo quiero. Alguien puede ayudarme? gracias!



PD: No se si esto debería ir aquí o encaja mejor en "Bases de Datos"...
  #2 (permalink)  
Antiguo 19/09/2005, 08:45
 
Fecha de Ingreso: junio-2005
Mensajes: 28
Antigüedad: 18 años, 10 meses
Puntos: 0
Bueno si lo que he entendido es lo que quieres hacer, pues aquí te dejo la solucion:
Tendrás que usar las funciones DAY(), MONTH() y YEAR() de MySQL. A cada uno de ellos le debes pasar como parametro una fecha. Lo que nos daria una consulta del tipo:
Código PHP:
$sql="SELECT campo1,campo2...DAY(campoFecha) AS dia, MONTH(campoFecha) AS mes, YEAR(campoFecha) AS anio...FROM tabla WHERE condicion ORDER BY anio DESC,mes DESC,dia DESC"
Como ves, lo ordeno por año, mes y dia descendentemente.
Espero que sea lo que necesitas.
  #3 (permalink)  
Antiguo 19/09/2005, 12:57
Avatar de sty
sty
 
Fecha de Ingreso: octubre-2003
Mensajes: 116
Antigüedad: 20 años, 5 meses
Puntos: 1
Gracias terror_zine, pero no entiendo eso de DAY(campoFecha) AS dia, MONTH(campoFecha) AS mes, YEAR(campoFecha) AS anio

Quiero seleccionar todo donde la fecha sea igual o superior a la actual hasta un máximo de 10 registros. Ahora mismo tengo los días, meses y años en distintos campos en la BD, que no son date, pues estaba probando. Debería estar la fecha en un solo campo y de que tipo?
  #4 (permalink)  
Antiguo 19/09/2005, 15:19
Avatar de Maycol  
Fecha de Ingreso: diciembre-2001
Ubicación: Ávila (España)
Mensajes: 539
Antigüedad: 22 años, 4 meses
Puntos: 0
sty teniendo la fecha dividida en diferentes campos solo te complicas la vida, lo realmente interesante y que te ayudara mucho es guardar la fecha en timestamp, ten en cuenta que el timestamp de php y el de mysql es distinto existen unas funciones para convertir de unos a otros pero ahora mismo no me acuerdo a ver si alguien nos la comenta...
  #5 (permalink)  
Antiguo 20/09/2005, 12:25
Avatar de sty
sty
 
Fecha de Ingreso: octubre-2003
Mensajes: 116
Antigüedad: 20 años, 5 meses
Puntos: 1
Cita:
Iniciado por Maycol
sty teniendo la fecha dividida en diferentes campos solo te complicas la vida, lo realmente interesante y que te ayudara mucho es guardar la fecha en timestamp, ten en cuenta que el timestamp de php y el de mysql es distinto existen unas funciones para convertir de unos a otros pero ahora mismo no me acuerdo a ver si alguien nos la comenta...
Ok Maycol!
A ver si alguien nos comenta..
  #6 (permalink)  
Antiguo 20/09/2005, 12:45
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Si tienes la fecha guardada en 3 campos diferentes haz esto:

$fecha="d/n/Y";
$sql="select * from tabla where (dia & '/' & mes & '/' & año)='$fecha' order by año,mes,dia";

Esto: (dia & '/' & mes & '/' & año) concatena los 3 campos, formando la fecha.
  #7 (permalink)  
Antiguo 20/09/2005, 15:59
Avatar de sty
sty
 
Fecha de Ingreso: octubre-2003
Mensajes: 116
Antigüedad: 20 años, 5 meses
Puntos: 1
thanks.

Finalmente he llegado a este código que debería funcionar:

Código PHP:
$dia date("d"); 
$mes date("m"); 
$year date("Y");
$fechaactual $year."-".$mes."-".$dia;
$sql "SELECT * FROM mitabla WHERE fecha<='$fechaactual' ORDER BY fecha LIMIT 10";
$result mysql_query($sql);
if(
$row mysql_fetch_array($result))
{
    echo 
"Lo que sea";
}
else
{
echo 
"No hay resultados";

He calculado la fecha actual, la compara con las de la BD para que sea igual fecha o posterior y las extrae hasta 10.

No se el motivo pero sólo recibo 1 resultado, realmente existen más y el límite es 10.

Última edición por sty; 20/09/2005 a las 16:32
  #8 (permalink)  
Antiguo 20/09/2005, 16:32
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Podrias usar la funcion unix_timestamp(fecha), asi:

$sql = "SELECT * FROM mitabla WHERE unix_timestamp(fecha)>=unix_timestamp('$fechaactua l') ORDER BY fecha LIMIT 10";
  #9 (permalink)  
Antiguo 20/09/2005, 16:39
Avatar de sty
sty
 
Fecha de Ingreso: octubre-2003
Mensajes: 116
Antigüedad: 20 años, 5 meses
Puntos: 1
Para asegurarme el mismo formato de fecha cambié el campo fecha a Date y la fecha actual la hago asi:
$fechaactual = $year."-".$mes."-".$dia;

Tanto con el código último que he puesto, como con el tuyo, obtengo 1 solo resultado posterior a la fecha actual, cuando estoy viendo perfectamente en la base de datos que hay muchos más
Que extraño
  #10 (permalink)  
Antiguo 20/09/2005, 16:50
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Prueba asi:

$sql = "SELECT * FROM mitabla WHERE unix_timestamp(fecha)>=unix_timestamp(now()) ORDER BY fecha LIMIT 10";

En tu tabla tienes fechas mayores que hoy?
  #11 (permalink)  
Antiguo 21/09/2005, 08:34
Avatar de sty
sty
 
Fecha de Ingreso: octubre-2003
Mensajes: 116
Antigüedad: 20 años, 5 meses
Puntos: 1
He utilizado el código que me has puesto pero seguía con 1 sólo resultado, he visto que el problema está en el IF. Porque simplemente con este código funciona

Código PHP:
$sql 'SELECT * FROM pc WHERE fecha<=now() ORDER BY fecha LIMIT 10';
$result mysql_query($sql);
while(
$row mysql_fetch_array($result)){
echo 
"El contenido que sea";

No se porque pero con el IF solo obtengo 1 resultado, mientras si no hago un IF y pongo while sale bien, algo haré mal. ¿Como debería escribirlo? Quiero poner un ELSE por si alguna vez no hubiera resultados.
  #12 (permalink)  
Antiguo 21/09/2005, 08:43
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
wenas,
si usas solamente el IF no te recorre el array q genera, entonces solo te muestra ese resultado.
puedes hacerlos con el If para comprobar si hay algun resultado y luego crear el bucle ya sea con un WHILE o bien un FOR.
Código PHP:
$sql 'SELECT * FROM pc WHERE fecha<=now() ORDER BY fecha LIMIT 10'
$result mysql_query($sql); 
$numeroRegistros=mysql_num_rows($result);
if(
$numeroRegistros<=0)
{
   echo 
"<div align='center'>";
   echo 
"<font face='verdana' size='-2'>No hay resultados</font>";
   echo 
"</div>";
}else{
 while(
$row mysql_fetch_array($result)){ 
    echo 
"El contenido que sea"
 } 

espero q te sirva...
Saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #13 (permalink)  
Antiguo 21/09/2005, 09:24
Avatar de sty
sty
 
Fecha de Ingreso: octubre-2003
Mensajes: 116
Antigüedad: 20 años, 5 meses
Puntos: 1
Perfecto sergi_climent, va como lo quería .
Gracias a todos :)
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 05:31.