Foros del Web » Programando para Internet » PHP »

Mostrar dato según una fecha límite

Estas en el tema de Mostrar dato según una fecha límite en el foro de PHP en Foros del Web. Hola estoy tratando de desarrollar una aplicación en php que muestre dato según la fecha actual pero que tenga como condición una fecha límite, de ...
  #1 (permalink)  
Antiguo 25/05/2010, 15:23
Avatar de salvador86  
Fecha de Ingreso: enero-2008
Ubicación: Guadalajara- Mexico
Mensajes: 467
Antigüedad: 16 años, 11 meses
Puntos: 2
Mostrar dato según una fecha límite

Hola estoy tratando de desarrollar una aplicación en php que muestre dato según la fecha actual pero que tenga como condición una fecha límite, de la siguiente manera una tabla de mi bd llamada tiene los siguientes datos
Cita:
id_partida | nombre_tours | descripcion | fecha_partida
__________________________________________________ _______
1 | cusco2d | Viaje a Cusco 2 días, proxima partida: | 2010-06-15
2 | cusco2d | Viaje a Cusco 2 días, proxima partida: | 2010-07-15
3 | cusco3d | Viaje a Cusco 3 días, proxima partida: | 2010-08-15
4 | cusco3d | Viaje a Cusco 3 días, proxima partida: | 2010-09-15
En esta tabla por ejemplo coloco dos proximas partidas para dos tours y quiero obtener y mostrar mediante una consulta la partida más proxima por ejemplo hoy es 2010-05-25 entonces para el tour "cusco2d" la fecha próxima sería 2010-06-15 y cuando pase esa fecha será 2010-07-15

Soy novato en php y he tratado de adaptar este código pero me esta dando error en la línea 15, según yo debería mostrarse todos los datos según la condición de consulta, pero no
Código PHP:
<?php
//Conectar a mi base de datos
$conexion mysql_connect("localhost""usuario""contraseña") or die(mysql_error());
mysql_select_db("bd"$conexion) or die(mysql_error());
//Obtener que tipo de tour es
$nombre_tours "cusco2d";
//Obtener la fecha de sistema
$fecha_actual time();
//Hacer consulta
//Los campos de la tabla son: id_partida, nombre_tours, descripcion, fecha_partida
$cadena_sql="SELECT * FROM tours_partidas WHERE nombre_tours = '$nombre_tours' AND fecha_partida>='$fecha_actual'";
$consulta_partida mysql_query($cadena_sql,$conexion) or die(mysql_error()); 

//Obtengo el numero de filas que se hayan obtenido de las consultas
$numero_busquedas mysql_num_rows($run);//ESTA es la línea 15
//Obtengo la priemra fila (Supuestamente creo que me dara la fecha más próxima)
if ($numero_busquedas==0)
    echo 
"No hay partidas proximas";
else
{
    while (
$runrows mysql_fetch_assoc($run))
    {
        
$descripcion $runrows['descripcion'];
                    
$fechapartida $runrows['fecha_partida'];
        echo 
"$descripcion $fechapartida";
    }
}
?>
Pero solo deseo un registro solo el más proximo, no se si según la consulta que he hecho se puede poner como condición si una fecha es menor que otra, alguna sugerencia, les agradeceré mucho.

Última edición por salvador86; 25/05/2010 a las 15:29
  #2 (permalink)  
Antiguo 25/05/2010, 17:01
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Mostrar dato según una fecha límite

El problema es que estas usando $run para tratar de obtener el total de filas devueltas por la consulta, en todo caso, deberia ser:

$numero_busquedas = mysql_num_rows($consulta_partida);

Y en lineas posteriores del codigo tambien tienes ese error.

Edito para agregar:

La fecha en la base de datos la estas guardando como entero (timestamp) o con campo tipo DATE de MySQL?

$fecha_actual = time(); almacena la fecha en formato UNIX (Segundos transcurridos desde el 1-ene/1970), mientras que los campos MySQL DATE usan otro formato y, creo que te convendria mas usar: WHERE fecha_partida >= CURDATE()
__________________
- León, Guanajuato
- GV-Foto

Última edición por Triby; 25/05/2010 a las 17:07
  #3 (permalink)  
Antiguo 26/05/2010, 07:29
Avatar de salvador86  
Fecha de Ingreso: enero-2008
Ubicación: Guadalajara- Mexico
Mensajes: 467
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: Mostrar dato según una fecha límite

Hola Triby gracias por responder, la fecha lo estoy guardando como date, voy a probar tu sugerencia gracias
  #4 (permalink)  
Antiguo 26/05/2010, 08:36
Avatar de salvador86  
Fecha de Ingreso: enero-2008
Ubicación: Guadalajara- Mexico
Mensajes: 467
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: Mostrar dato según una fecha límite

Hola Tribi he intentado ahora solo obtener solo para primera fila excluyendo a las demas filas de la consulta pero cuando saco el while me da error me ayudarias en decirle la funcion que obtendría solo la primera fila, gracias y creo que tengo un error en mi consulta pues tambien me devuelve los tours que no puse como condicion y cuando cambie la fecha de mi sistema para que cambie la fecha de partida se siguio mostrando la fecha anterior te lo agradeceré mucho

Última edición por salvador86; 26/05/2010 a las 08:42
  #5 (permalink)  
Antiguo 26/05/2010, 10:23
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Mostrar dato según una fecha límite

Tal vez en tu consulta dejaste solo el filtro fecha_partida y quitaste nombre_tours, yo solo te sugeria como manejar las fechas, no eliminar los otros campos.

Para cargar la cantidad de registros que desees (claro, si existen) usas LIMIT registro_inicial, registros_a_leer.

Para mayor info y ejemplos de uso, visita el Manual de MySQL
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 26/05/2010, 10:45
 
Fecha de Ingreso: mayo-2010
Mensajes: 17
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Mostrar dato según una fecha límite

Triby, una pregunta, como puedo hacerle para una consulta usando un rango de fechas donde el usuario ingresa la fecha inicial y la fecha final, mi campo fecha es tipo smalltimedate. uso php y ssql

ejemplo simple:

$fecha=date("Y-n-j H:i");
echo $fecha;
echo"<BR>";

$consulta = 'SELECT folfac,fecfac FROM facturas WHERE cvecte ="0025" AND (fecfac < CAST($fecha AS smalldatetime)) ORDER BY fecfac desc';

aun que haga una consulta simple con una fecha ($fecha), me marca el siguiente error:

Warning: mssql_query() [function.mssql-query]: message: La pseudocolumna "$fecha" no es válida. (severity 15) in D:wwwfechas2.php on line 18

Gracias y Excelente Foro!!!!
  #7 (permalink)  
Antiguo 26/05/2010, 12:28
Avatar de salvador86  
Fecha de Ingreso: enero-2008
Ubicación: Guadalajara- Mexico
Mensajes: 467
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: Mostrar dato según una fecha límite

Hola Triby me ha salido un inconveniente si sale mientras las fechas ingresadas hallan sido insertada ascendentemente (2 ,3, 4) pero en caso, despues de ingresar los datos se me ocurra ingresar una fecha anterior a las que ya habia puesto, me saldra siempre la fecha que antes era proxima. Habra una manera que de la seleccion calcule cual es la fecha menor y lo arroje como resultado. gracias
  #8 (permalink)  
Antiguo 26/05/2010, 12:56
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Mostrar dato según una fecha límite

En el enlace que te deje anteriormente puedes ver toda la estructura de una consulta, en este caso solo tienes que agregar ORDER BY campo_para_ordenar DESC

Ejemplo: SELECT campo1, campo2, campoN FROM tabla WHERE condicion ORDER BY campo2 DESC LIMIT inicio,registros
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 27/05/2010, 07:24
Avatar de salvador86  
Fecha de Ingreso: enero-2008
Ubicación: Guadalajara- Mexico
Mensajes: 467
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: Mostrar dato según una fecha límite

Hola Tribi lo he probado con ASC para que me de el menor pero tengo dudas con el código pues igual hace una busqueda de información sin respetar la condición del "nombre de tour" y ademas hice una entrada menor en la fecha de partida y sigue arrojandome la fecha menor anterior, así quedaría mi código, y para mostrar el resultado estoy usando while pero como espero solo un resultado creo que debería obviar ese bucle pero cuando lo saco me bota error por ejemplo si se muestra así:
Código PHP:
    while ($runrows mysql_fetch_assoc($consulta_partida))
    {
        
$descripcion $runrows['descripcion'];
        
$fecha_partida $runrows['fecha_partida'];
        echo 
"$descripcion $fecha_partida";
    } 
lo pongo así:
Código PHP:
$runrows mysql_fetch_assoc($consulta_partida)
$descripcion $runrows['descripcion'];
$fecha_partida $runrows['fecha_partida'];
echo 
"$descripcion $fecha_partida"
Y ahí viene el error
Así esta quedando mi código que por el momento funciona pero no bien creo yo
Código PHP:
<?php
$conexion 
mysql_connect("localhost""usuario""contraseña") or die(mysql_error());
mysql_select_db("bd"$conexion) or die(mysql_error());
$nombre_tours "cusco2d";
//Los campos de la tabla son: id_partida, nombre_tours, descripcion, fecha_partida
$cadena_sql="SELECT * FROM tours_partidas WHERE nombre_tours = '$nombre_tours' AND fecha_partida>=CURDATE() ORDER BY fecha_partida ASC LIMIT 0,1";
$consulta_partida mysql_query($cadena_sql,$conexion) or die(mysql_error()); 

//Obtengo el numero de filas que se hayan obtenido de las consultas
$numero_busquedas mysql_num_rows($consulta_partida);
if (
$numero_busquedas==0)
    echo 
"No hay partidas proximas";
else
{
    while (
$runrows mysql_fetch_assoc($consulta_partida))
    {
        
$descripcion $runrows['descripcion'];
        
$fecha_partida $runrows['fecha_partida'];
        echo 
"$descripcion $fecha_partida";
    }
}
?>
aquí se puede verlo http://www.pyminstalaciones.com/datos-segun-fecha.php puse una fecha en mayo pero sigue mostrandome la fecha de junio, alguna sugerencia te lo agradeceré mucho.
  #10 (permalink)  
Antiguo 27/05/2010, 07:37
Avatar de salvador86  
Fecha de Ingreso: enero-2008
Ubicación: Guadalajara- Mexico
Mensajes: 467
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: Mostrar dato según una fecha límite

Asi esta mi base de datos ahora
Cita:
id_partida | nombre_tours | descripcion | fecha_partida
__________________________________________________ _______
1 | cusco2d | Viaje a Cusco 2 días, proxima partida: | 2010-06-15
2 | cusco2d | Viaje a Cusco 2 días, proxima partida: | 2010-07-15
3 | cusco3d | Viaje a Cusco 3 días, proxima partida: | 2010-08-15
4 | cusco3d | Viaje a Cusco 3 días, proxima partida: | 2010-09-15
4 | cusco2d | Viaje a Cusco 2 días, proxima partida: | 2010-05-30
  #11 (permalink)  
Antiguo 27/05/2010, 07:44
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Mostrar dato según una fecha límite

Prueba sin usar LIMIT, para que te devuelva todos los registros que obtiene, nos cuentas los resultados y tal vez asi podamos ver que es lo que esta pasando.
__________________
- León, Guanajuato
- GV-Foto
  #12 (permalink)  
Antiguo 27/05/2010, 08:45
Avatar de salvador86  
Fecha de Ingreso: enero-2008
Ubicación: Guadalajara- Mexico
Mensajes: 467
Antigüedad: 16 años, 11 meses
Puntos: 2
Hola Tribi muchas gracias por tu ayuda si estaba bien el código era el problema un error de mi ingreso de información a mi tabla, pero una consulta como el select me arrojará un solo resultado no podria evitar el bucle while he imprimir de frente el resultado, muchas gracias

Hola he probado este código para mostrar la fecha en el formato de dia/ mes / año

$cadena_sql="SELECT id_partida, nombre_tours, descripcion, DATE_FORMAT(fecha_partida,'%d del %m de %Y') as fecha_partida FROM tours_partidas WHERE nombre_tours = '$nombre_tours' AND fecha_partida>=CURDATE() ORDER BY fecha_partida ASC LIMIT 0,1";

Pero si deseo mostrar el nombre del mes en vez del numero ¿que funcion debería aplicar? alguna sugerencia. gracias

Última edición por salvador86; 27/05/2010 a las 09:45
  #13 (permalink)  
Antiguo 27/05/2010, 10:21
Avatar de salvador86  
Fecha de Ingreso: enero-2008
Ubicación: Guadalajara- Mexico
Mensajes: 467
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: Mostrar dato según una fecha límite

Hola ya lo logre y pongo el código para la posteridad muchas gracias Tribi por tu ayuda.
Código PHP:
<?php
$conexion 
mysql_connect("localhost""usuario""contraseña") or die(mysql_error());
mysql_select_db("base_datos"$conexion) or die(mysql_error());
$nombre_tours "cusco2d";
//Los campos de la tabla son: id_partida, nombre_tours, descripcion, fecha_partida
$cadena_sql="SELECT * FROM tours_partidas WHERE nombre_tours = '$nombre_tours' AND fecha_partida>=CURDATE() ORDER BY fecha_partida ASC LIMIT 0,1";
$consulta_partida mysql_query($cadena_sql,$conexion) or die(mysql_error()); 

//Obtengo el numero de filas que se hayan obtenido de las consultas
$numero_busquedas mysql_num_rows($consulta_partida);
if (
$numero_busquedas==0)
    echo 
"No hay partidas proximas";
else
{
    while (
$runrows mysql_fetch_assoc($consulta_partida))
    {
    
$fecha_partida $runrows['fecha_partida'];
    }
}
function 
convierte_fecha($fecha_ingles){
    
$ano=substr($fecha_ingles04);
    
$mes=substr($fecha_ingles52);
    
$dia=substr($fecha_ingles82);
    
    if (
$mes=="01"$mes="Enero";
    elseif (
$mes=="02"$mes="Febrero";
    elseif (
$mes=="03"$mes="Marzo";
    elseif (
$mes=="04"$mes="Abril";
    elseif (
$mes=="05"$mes="Mayo";
    elseif (
$mes=="06"$mes="Junio";
    elseif (
$mes=="07"$mes="Julio";
    elseif (
$mes=="08"$mes="Agosto";
    elseif (
$mes=="09"$mes="Septiembre";
    elseif (
$mes=="10"$mes="Octubre";
    elseif (
$mes=="11"$mes="Noviembre";
    elseif (
$mes=="12"$mes="Dicienbre";
    else 
$mes="--";
    
$fecha_castellano = ($dia." de ".$mes." de ".$ano);

    echo 
"Proxima partida: $fecha_castellano";
    }
convierte_fecha($fecha_partida);
?>
  #14 (permalink)  
Antiguo 27/05/2010, 10:32
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Mostrar dato según una fecha límite

Excelente, me alegra que por fin lo hayas solucionado; solo agrego un par de aclaraciones:

Cuando usas ORDER BY, si lo necesitas ascendente no es necesario especificar ASC, puesto que es la opcion por defecto, aunque no deberia afectar que este presente.

Cuando usas limit, si vas a leer del registro cero en adelante, puedes especificar solo la cantidad de registros, por ejemplo:

LIMIT 0,5 es igual que LIMIT 5, lee los primeros 5 registros que cumplan las condiciones de la consulta.

Si vas a obtener un solo registro, puedes omitir el while() y leer directamente con mysql_fetch_assoc()
__________________
- León, Guanajuato
- GV-Foto
  #15 (permalink)  
Antiguo 27/05/2010, 10:49
Avatar de salvador86  
Fecha de Ingreso: enero-2008
Ubicación: Guadalajara- Mexico
Mensajes: 467
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: Mostrar dato según una fecha límite

Hola Tribi una consulta cuando yo saco el while me sale error osea en vez de

while ($runrows = mysql_fetch_assoc($consulta_partida))
{
$fecha_partida = $runrows['fecha_partida'];
}

//pongo

$runrows = mysql_fetch_assoc($consulta_partida)
$fecha_partida = $runrows['fecha_partida'];

Ahora me han pedido que se muestre todos tours con sus fechas de proximas partidas en una misma página ahora la consulta no tendra la condicion de nombre de tours y no podre usar LIMIT, como sería la consulta para que muestre solo las proximas partidas de todos los tours, gracias por tu ayuda

Última edición por salvador86; 27/05/2010 a las 11:01
  #16 (permalink)  
Antiguo 27/05/2010, 11:25
Avatar de salvador86  
Fecha de Ingreso: enero-2008
Ubicación: Guadalajara- Mexico
Mensajes: 467
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: Mostrar dato según una fecha límite

En teoría una subconsulta sería la solución y plantearía yo esa consulta pensando en: Seleccionar todos los campos de la tabla cuya fecha sean menores de la seleccion que ya se hizo.

Y lo escribiría así

Código PHP:
SELECT FROM tours_partidas WHERE fecha_partida <
(
SELECT fecha_partida FROM tours_partidas WHERE fecha_partida>=CURDATE() ORDER BY fecha_partida ASC
No creo que este bien la sintaxis pues me sale error alguna sugerencia, muchas gracias

Última edición por salvador86; 27/05/2010 a las 11:40
  #17 (permalink)  
Antiguo 27/05/2010, 11:59
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Mostrar dato según una fecha límite

De hecho, no esta bien la consulta, debes poner en el WHERE solamente que fecha_partida sea mayor o igual que la fecha actual:

Código MySQL:
Ver original
  1. SELECT * FROM tours_partidas WHERE fecha_partida>=CURDATE() ORDER BY fecha_partida ASC

Y en este caso, si debes mantener el while.
__________________
- León, Guanajuato
- GV-Foto
  #18 (permalink)  
Antiguo 27/05/2010, 13:47
Avatar de salvador86  
Fecha de Ingreso: enero-2008
Ubicación: Guadalajara- Mexico
Mensajes: 467
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: Mostrar dato según una fecha límite

Hola TRibi con esa consulta tengo como resultado todos los datos de mi tabla y aqui se ve el resultado http://www.pyminstalaciones.com/datos-segun-fecha3.php ya puse el llamado de la función convierte_fecha que imprime la fecha en el while pero como veras como yo quiero poner todas las fechas de partida de todo el año me va arrojar mas de un dato por tours solo quiero el más proximo de cada tours, como podria hacer ese filtro, muchas gracias
  #19 (permalink)  
Antiguo 27/05/2010, 14:31
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Mostrar dato según una fecha límite

No estoy seguro, pero tal vez podria ser algo como:

SELECT DISTINCT nombre_tours, id_partida, descripcion, fecha_partida FROM ....

Si no funciona como quieres, entonces te convendria preguntar en el Foro de MySQL
__________________
- León, Guanajuato
- GV-Foto
  #20 (permalink)  
Antiguo 27/05/2010, 14:52
Avatar de salvador86  
Fecha de Ingreso: enero-2008
Ubicación: Guadalajara- Mexico
Mensajes: 467
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: Mostrar dato según una fecha límite

Ok Triby muchas gracias por tu ayuda ha sido de gran ayuda
  #21 (permalink)  
Antiguo 05/04/2013, 10:06
 
Fecha de Ingreso: febrero-2013
Mensajes: 8
Antigüedad: 11 años, 10 meses
Puntos: 0
Pregunta Respuesta: Mostrar dato según una fecha límite

Tengo un conflicto similar...

tengo la fecha en la cual se realizo la revisión técnica y en otro la prox fecha pero quiero que el sistema me arroje una alerta con un mes de anticipación diciendo que el pazo de la revisión técnica esta a punto de vencer.

si me ayudan se los agradeceria

Etiquetas: dato, fechas
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 18:27.