Foros del Web » Programando para Internet » PHP »

Problema con between date

Estas en el tema de Problema con between date en el foro de PHP en Foros del Web. buenas a todos vuelvo de nuevo tras agotar la esperanza. mi problema es Ejemplo: mis datos (mysql) id_hotel check_in: date (yyyy-mm-dd) check_out: date (yyyy-mm-dd) precio ...
  #1 (permalink)  
Antiguo 10/11/2010, 07:24
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 10 años, 6 meses
Puntos: 25
Problema con between date

buenas a todos vuelvo de nuevo tras agotar la esperanza.
mi problema es

Ejemplo:
mis datos (mysql)

id_hotel
check_in: date (yyyy-mm-dd)
check_out: date (yyyy-mm-dd)
precio

los precio estan asignados por fecha ejemplo
precio 40 (check_in 2010-11-9 ) y (check_out 2010-11-23)
precio 33(check_in 2010-11-24 ) y (check_out 2010-11-30)

Código PHP:
Ver original
  1. $query = "SELECT * FROM precio_hotel WHERE check_in  >=  '".$check_in."' AND chec_out <= '".$check_out."'  GROUP BY id_hotel";
  2. $result = mysql_query($query, $GLOBALS['DB']);
y el resultado de precio sale correcto sale correcto pero no selecciona las fechas donde se cambia el precio

ose sí seleccionamos una fecha entre 2010-11-11 hasta 2010-11-25 son 14 dias
da un resultado de las fechas que estan dentro 11 hasta 25 aun hay otro hotel disponible solo desde 2010-11-16 hasta 2010-11-27 que solo son 9 dias hasta 25

mi pregunta es como puedo seleccionar solo los dias exactos de una reserva y no emprime tambien otras que sean demenos pero dentro de la fecha

gracias por adelantado y tendo la esperanza en vosotros por eso existe el foro
  #2 (permalink)  
Antiguo 10/11/2010, 07:28
 
Fecha de Ingreso: febrero-2010
Mensajes: 818
Antigüedad: 10 años, 3 meses
Puntos: 55
Respuesta: Problema con between date

en vez de >= y <= usa solo = y seleccionaras las fechas exactas
  #3 (permalink)  
Antiguo 10/11/2010, 07:33
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 11 años
Puntos: 1517
Respuesta: Problema con between date

Para eso existe un operador llamado BETWEEN en MySQL.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 10/11/2010, 07:40
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 10 años, 6 meses
Puntos: 25
Respuesta: Problema con between date

gracias por responder
el simbolo = imprime solamente la fecha seleccionada no entre las dos

y tambien he probado between pero no sale como he comentado
  #5 (permalink)  
Antiguo 10/11/2010, 07:41
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 10 años, 6 meses
Puntos: 25
Respuesta: Problema con between date

no se sí hay que crear una function para eso ?????
  #6 (permalink)  
Antiguo 10/11/2010, 07:43
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 11 años
Puntos: 1517
Respuesta: Problema con between date

No haz usado BETWEEN porque no lo veo en el ejemplo. Pasa por el enlace que te indiqué para que veas ejemplos de como hacerlo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 10/11/2010, 07:49
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 10 años, 6 meses
Puntos: 25
Respuesta: Problema con between date

lo he utilizado en mi escript muchas veces
lo puede ver aqui
Código HTML:
Ver original
  1. <a href="http://www.forosdelweb.com/f86/seleccionar-precio-entre-dos-fechas-diferentes-mysql-795331">Click</a>
pero ya he cambiado un poco el codigo
  #8 (permalink)  
Antiguo 10/11/2010, 08:00
 
Fecha de Ingreso: febrero-2010
Mensajes: 818
Antigüedad: 10 años, 3 meses
Puntos: 55
Respuesta: Problema con between date

Cita:
mi pregunta es como puedo seleccionar solo los dias exactos de una reserva y no emprime tambien otras que sean demenos pero dentro de la fecha
puede ser q el error este al momento de imprimir los datos, porque si quieres ver que hoteles tienen una reserva exacata en los dias que ingresaste sigo insistiendo que es con =fecha.

podrias poner que es lo que quieres que muestre el resultado asi podemos mejorar la consulta
  #9 (permalink)  
Antiguo 10/11/2010, 08:10
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 10 años, 6 meses
Puntos: 25
Respuesta: Problema con between date

gracias Death_Empire
ahora no me encuentro en casa le mustrare cuando llegue
gracias de nuevo
  #10 (permalink)  
Antiguo 11/11/2010, 08:16
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 10 años, 6 meses
Puntos: 25
Respuesta: Problema con between date

he vuelto de nuevo programadores aver si me podrian ayudar :(

aqui os dejo el script
Código PHP:
Ver original
  1. $check_out = $_POST['check_out'];
  2. $check_in = $_POST['check_in'];
  3.    
  4.     // verify item exists
  5.  
  6. $query = "SELECT id_hotel, check_in, check_out,  precio FROM precio WHERE check_in AND check_out BETWEEN '".$check_in."' AND  '".$check_out."'  ";
  7. $result = mysql_query($query, $GLOBALS['DB']);
  8. if (!$result){
  9.     echo "No hay habitaciones disponibles en estas fechas";
  10. }
  11.                                      
  12.                                          
  13.          while ($row = mysql_fetch_assoc($result))
  14.                                        {
  15.                                            
  16.                                     echo "Precio : ".$row['precio']."<br />";

la base datos:

CREATE TABLE IF NOT EXISTS `precio` (
`id_precio` int(11) NOT NULL AUTO_INCREMENT,
`id_hotel` varchar(5) COLLATE latin1_general_ci NOT NULL,
`check_in` date NOT NULL,
`check_out` date NOT NULL,
`precio` double(5,2) NOT NULL,
PRIMARY KEY (`id_precio`),
KEY `precio` (`precio`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=4 ;

--
-- Volcar la base de datos para la tabla `precio`
--

INSERT INTO `precio` (`id_precio`, `id_hotel`, `check_in`, `check_out`, `precio`) VALUES
(1, '3', '2010-11-10', '2010-11-26', 40.00),
(2, '3', '2010-11-27', '2010-11-30', 45.00),
(3, '23', '2010-11-16', '2010-11-29', 65.00);

al seleccionar fecha check_in 2010-11-11 hasta check_out 2010-11 30
me da el resultado

Precio : 40.00
Precio : 45.00
Precio : 65.00

y lo que quiero es que el precio 40 y 45 es del mismo hotel osea apartir del 2010-11-26 hay que aplicar el nuevo precio que es 45

he probado de crear otra base datos que asigna los precio diaro y consultarlo con COUNT(precio) AS precio en este caso sale el precio bien pero sin aplecar el nuevo precio



porfavor sí que hay alguien que me puede ayudar y confio en esto

Última edición por arros; 11/11/2010 a las 08:24
  #11 (permalink)  
Antiguo 11/11/2010, 09:21
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 10 años, 6 meses
Puntos: 25
Respuesta: Problema con between date

Cita:
Iniciado por Death_Empire Ver Mensaje
puede ser q el error este al momento de imprimir los datos, porque si quieres ver que hoteles tienen una reserva exacata en los dias que ingresaste sigo insistiendo que es con =fecha.

podrias poner que es lo que quieres que muestre el resultado asi podemos mejorar la consulta
he vuelto de nuevo programadores aver si me podrian ayudar :(

aqui os dejo el script
Código PHP:
Ver original
  1. $check_out = $_POST['check_out'];
  2.  
  3.       $check_in = $_POST['check_in'];
  4.  
  5.           // verify item exists
  6.  
  7.       $query = "SELECT id_hotel, check_in, check_out,  precio FROM precio WHERE check_in AND check_out BETWEEN '".$check_in."' AND  '".$check_out."'  ";
  8.  
  9.       $result = mysql_query($query, $GLOBALS['DB']);
  10.  
  11.       if (!$result){
  12.  
  13.           echo "No hay habitaciones disponibles en estas fechas";
  14.  
  15.       }
  16.  
  17.                while ($row = mysql_fetch_assoc($result))
  18.  
  19.                                              {
  20.  
  21.                                           echo "Precio : ".$row['precio']."<br />";
Código SQL:
Ver original
  1. la base datos:
  2.  
  3. CREATE TABLE IF NOT EXISTS `precio` (
  4. `id_precio` INT(11) NOT NULL AUTO_INCREMENT,
  5. `id_hotel` VARCHAR(5) COLLATE latin1_general_ci NOT NULL,
  6. `check_in` DATE NOT NULL,
  7. `check_out` DATE NOT NULL,
  8. `precio` DOUBLE(5,2) NOT NULL,
  9. PRIMARY KEY (`id_precio`),
  10. KEY `precio` (`precio`)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=4 ;
  12.  
  13. --
  14. -- Volcar la base de datos para la tabla `precio`
  15. --
  16.  
  17. INSERT INTO `precio` (`id_precio`, `id_hotel`, `check_in`, `check_out`, `precio`) VALUES
  18. (1, '3', '2010-11-10', '2010-11-26', 40.00),
  19. (2, '3', '2010-11-27', '2010-11-30', 45.00),
  20. (3, '23', '2010-11-16', '2010-11-29', 65.00);
al seleccionar fecha check_in 2010-11-11 hasta check_out 2010-11 30
me da el resultado

Precio : 40.00
Precio : 45.00
Precio : 65.00

y lo que quiero es que el precio 40 y 45 es del mismo hotel osea apartir del 2010-11-26 hay que aplicar el nuevo precio que es 45

he probado de crear otra base datos que asigna los precio diaro y consultarlo con COUNT(precio) AS precio en este caso sale el precio bien pero sin aplecar el nuevo precio



porfavor sí que hay alguien que me puede ayudar y confio en esto
  #12 (permalink)  
Antiguo 11/11/2010, 12:24
 
Fecha de Ingreso: febrero-2010
Mensajes: 818
Antigüedad: 10 años, 3 meses
Puntos: 55
Respuesta: Problema con between date

al seleccionar fecha check_in 2010-11-11 hasta check_out 2010-11 30
me da el resultado

Precio : 40.00
Precio : 45.00
Precio : 65.00

los dos primeros son del Hotel 3 y quieres que todas las reservas posteriores a 26 en el hotel 3 el precio sea 45.000 ???
  #13 (permalink)  
Antiguo 11/11/2010, 12:45
 
Fecha de Ingreso: noviembre-2009
Mensajes: 535
Antigüedad: 10 años, 6 meses
Puntos: 25
Respuesta: Problema con between date

gracis por responder de nuevo Death_Empire
he resuelto el problema
con el siguiente
Código PHP:
Ver original
  1. $query = "SELECT *, SUM(precio) AS precio FROM precio_hotel WHERE date BETWEEN '".$check_in."' AND DATE_SUB('".$check_out."',INTERVAL 1 DAY ) GROUP BY id_hotel HAVING COUNT(*)=ABS(DATEDIFF('".$check_in."','".$check_out."'));

tras crear nueva base de datos aun require mucho tiempo
el precio se asigna por dia asi que hay que asignar 365 precio a cada hotel

y ahora tengo un nuevo problema de session_register para rastrear a carrito de compra
no se como empesar :((((

Etiquetas: date
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 01:27.