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

Consulta sql y codigo php(Ayuda)

Estas en el tema de Consulta sql y codigo php(Ayuda) en el foro de Mysql en Foros del Web. Buenas a todos, tengo el siguiente problema: Tengo una tabla de nombre ofertas, el contenido de esta tabla es: Cita: id(tipo numero), fecha_inicio(datetime),fecha_fin(datetime),precio( numero) Desde ...
  #1 (permalink)  
Antiguo 15/04/2013, 04:06
 
Fecha de Ingreso: agosto-2012
Ubicación: España
Mensajes: 18
Antigüedad: 11 años, 8 meses
Puntos: 1
Pregunta Consulta sql y codigo php(Ayuda)

Buenas a todos, tengo el siguiente problema:
Tengo una tabla de nombre ofertas,
el contenido de esta tabla es:
Cita:
id(tipo numero), fecha_inicio(datetime),fecha_fin(datetime),precio( numero)
Desde php realizo una consulta sql basandome en los siguientes criterios:
Código:
<?php
echo "select * FROM ofertas WHERE fecha_inicio<='".$fecha_ini_cliente."' AND fecha_fin>'".$fecha_fin_cliente."'";
?>
Me funciona hasta aqui de forma correcta(puede que la consulta este mal, pero es solo para que entiendan el metodo que uso, ya que el código es más extenso y solo estoy intentando plantear mi problema)
Ahora puede darse el caso que el cliente ponga una fecha de inicio y fin que caiga justo en el medio de 2 ofertas, es decir, en la tabla ofertas tengo lo siguiente
Pongo en dos citas los valores diferentes de la tabla ofertas para que se note mejor
Cita:
1|01/4/2013 00:00:00|16/04/2013 00:00:00|25
Cita:
2|17/4/2013 00:00:00|30/04/2013 00:00:00|25
Ahora si el usuario pone fecha de inicio 04/04/2013 a 14/04/2013 no hay problema, en cambio si el usuario pone del 14/04/2013 hasta el 20/4/2013, no obtengo valor alguno .
El tema es que el precio es por día, al quitar el segundo criterio de la consulta sql, me retorna los 2 valores pero no entiendo por donde calcular el precio del cliente por dias, si a partir del dia 17 tiene otro precio diferente.
Actualmente lo calculo mediante un while recorriendo las fechas, pero no es lo correcto.

Estoy pensando realizar un bucle foreach a las ofertas y dentro el while para calcular los precios por noche y al finalizar el foreach mostrar el resultado, pero desconozco si es lo correcto.

Si necesitan que aporte algun otro dato más(codigo real no he expuesto, pero si lo necesitan digan), o me explique mejor, indiquenlo

Pd: como puedo buscar los temas que he creado? ya que cree uno pidiendo ayuda y no lo he respondido y no encuentro el enlace?
  #2 (permalink)  
Antiguo 15/04/2013, 05:18
 
Fecha de Ingreso: marzo-2013
Ubicación: Jaén, Andalucía
Mensajes: 129
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Consulta sql y codigo php(Ayuda)

xk no pruebas con esta etiqueta?=???
[URL="http://www.w3schools.com/sql/sql_between.asp"]http://www.w3schools.com/sql/sql_between.asp[/URL]

creo que sería lo más cómodo ;)
  #3 (permalink)  
Antiguo 15/04/2013, 08:11
 
Fecha de Ingreso: agosto-2012
Ubicación: España
Mensajes: 18
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: Consulta sql y codigo php(Ayuda)

gracias amigo, el between es correcto, pero no es lo que necesito, debido a que una fecha se puede cruzar con otra, es decir,
un cliente poner una fecha que esté entre las fechas finales e inicio de 2 ofertas
  #4 (permalink)  
Antiguo 16/04/2013, 01:25
 
Fecha de Ingreso: marzo-2013
Ubicación: Jaén, Andalucía
Mensajes: 129
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Consulta sql y codigo php(Ayuda)

pues entonces no se...y la cosa es k me interesa xk tengo que sacar listados por mes...y pensaba hacerlo entre las 2 fechas.....estaré pendiente a ver si me surge alguna idea ;)
  #5 (permalink)  
Antiguo 16/04/2013, 01:36
 
Fecha de Ingreso: agosto-2012
Ubicación: España
Mensajes: 18
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: Consulta sql y codigo php(Ayuda)

me tiene algo de cabeza, ya que lo ideal es solventarlo con una consulta sql, pero segun lo que he visto tengo que resolverlo por código.
En tu caso no tendrás este problema por que los listados tienen una fecha en concreto y no se mezclandichas fechas.
En mi caso debo obtener x registros y aplicarles un precio por dia.
es decir en mi ejemplo, si el cliente entra el día 14/04/2013 y sale el 20/4/2013 del 14 al 16 se le debe cobrar a 25, en cambio del 17 al 20 se le debe cobrar a 30, y al realizar un simple between no muestra ningun valor, ya que son 2 fechas por las que consulto, y una de ellas no cumpliría el criterio que este en un rango determinado.

Lo que estoy intentando hacer ahora para solventarlo(no es lo correcto, pero tengo que solventarlo de alguna forma) es generar una consulta sql basandome en la fecha inicial de la oferta(select * from desde <='fecha_FINAL_usuario'), de esta forma me muestra las posibles ofertas que esten disponibles, y desde código(foreach) leer las ofertas y validar que esten dentro del rango que el usuario ha seleccionado, creando un nuevo array y en caso de que se cruce hacer el promedio por dia del importe por los dias que este en cada fecha. y despues una media
  #6 (permalink)  
Antiguo 17/04/2013, 05:01
 
Fecha de Ingreso: marzo-2013
Ubicación: Jaén, Andalucía
Mensajes: 129
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Consulta sql y codigo php(Ayuda)

A ver, te comento, a mi el between con el phpmyadmin si me muestra los resultados de las fechas que le meto, es decir, que si le meto de fecha del 01/02 me aparecen los cursos de esas fecha inclusive, y en lo que quieres que te muestre puedes poner el precio (cosa que yo también hago ;) ) vamos lo que viene siendo un join

mira esto ;)

http://www.devjoker.com/contenidos/articulos/17/Consultas-combinadas-JOINS.aspx

y en el where le pones la condición de las fechas
  #7 (permalink)  
Antiguo 17/04/2013, 05:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta sql y codigo php(Ayuda)

Este tema es en realidad para el Foro de MySQL, no el de PHP, ya que tu problema no es de programación.
De todos modos, a nivel de SQL la solución es de una extrema simplicidad, aunque a veces resulta algo confuso. Te lo planteo así:
Si un clioente ingresa una nueva oferta, tal que no debe solaparse con otras, ese solapamiento puede darse:
1) El inicio cae entre inicio final de otra.
2) El final cae entre inicio y final de otra.
3) Empieza antes y termina después de otra.

Si te fijas, tienes tres condiciones distintas que no se pueden integrar en una única consulta, por tanto las tres condiciones deben ser consultadas. Como son interexcluyentes (un criterio niega el otro), so tres criterios opcionales y corresponde consultar por OR y no por AND.
En resumen, para obtener aquellas que se solapan, sería:
Código MySQL:
Ver original
  1. FROM tabla
  2. WHERE (inicioNuevaPromo BETWEEN inicioPromo AND finPromo)
  3.     OR (finNuevaPromo BETWEEN inicioPromo AND finPromo)
  4.     OR((inicioPromo BETWEEN inicioNuevaPromo AND finNuevaPromo) AND (finPromo BETWEEN inicioNuevaPromo AND finNuevaPromo))
Esa consulta considera las tres condiciones.
Atención: Los paréntesis son críticos para la tercera condición. No se pueden suprimir.

Personalmente, para una validación simple, yo la haría así:
Código MySQL:
Ver original
  1. SELECT COUNT(1) promos
  2. FROM tabla
  3. WHERE (inicioNuevaPromo BETWEEN inicioPromo AND finPromo)
  4.     OR (finNuevaPromo BETWEEN inicioPromo AND finPromo)
  5.     OR((inicioPromo BETWEEN inicioNuevaPromo AND finNuevaPromo) AND (finPromo BETWEEN inicioNuevaPromo AND finNuevaPromo))
Si el result de la consulta devuelve un valor mayor a cero, entonces esa nueva promoción se está solapando con alguna, en caso de devolver cero, la puedes insertar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: php, select, sql, tabla
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 09:34.