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

Duda consulta

Estas en el tema de Duda consulta en el foro de Mysql en Foros del Web. Buenas a todos!! Estoy liado con una consulta, a ver si entre todos me podeis echar una mano. Quiero que me saque las fechas de ...
  #1 (permalink)  
Antiguo 24/07/2012, 02:23
 
Fecha de Ingreso: julio-2012
Mensajes: 7
Antigüedad: 11 años, 9 meses
Puntos: 0
Duda consulta

Buenas a todos!!
Estoy liado con una consulta, a ver si entre todos me podeis echar una mano. Quiero que me saque las fechas de los dias que estan completos. En un dia puede haber varias franjas de horas, esas franjas se guardan en la tabla horario y en esa misma tabla es en la que controlo con un boolean si esta lleno o no ese horario. He probado con esta consulta,

Código:
select calendario.fecha from horario, calendario where calendario.fecha=horario.calendario_fecha and calendario.fecha >= CURDATE( ) AND fecha <= DATE_ADD( CURDATE( ) , INTERVAL 180 
DAY ) and horario.completo='1' and calendario.senda_idsenda='$idSendaSeleccionada'
, pero me saca las fechas que tienen el campo completo a 1. Como un dia puede tener varias fechas con campos completo a 1 me saca varias veces el mismo dia. Entonces queria que solo me sacase los dias en los que todas sus horarios esten completos (a 1)
Estoy pensando hacer una subconsulta, que podria sumar todos los completos (Los boolean en mysql los convierte a unos y ceros en formato tinyint) y compararlos con el numero de filas de la tabla horario. Si hay 4 horarios completos (completo a 1), en total tienen que sumar 4, que tienen que ser igual, al numero de filas. Pero no me termina de funcionar.
Espero que me podais echar una mano.
Un saludo!!
  #2 (permalink)  
Antiguo 24/07/2012, 04:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Duda consulta

Código MySQL:
Ver original
  1. select calendario.fecha
  2. from horario INNER JOIN calendario ON calendario.fecha=horario.calendario_fecha
  3. where  calendario.fecha >= CURDATE( )
  4. AND fecha <= DATE_ADD( CURDATE( ) , INTERVAL 180 DAY )
  5. and horario.completo='1'
  6. and calendario.senda_idsenda='$idSendaSeleccionada'
  7. GROUP BY calendario.fecha
  8. HAVING SUM(horario.completo)=4

Esto no?

Podrias hacerlo dinamico cambiando el 4 por una variable con el numero de franjas....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 24/07/2012, 05:05
 
Fecha de Ingreso: julio-2012
Mensajes: 7
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Duda consulta

Gracias por responder tan pronto!
Si es tal y como dices, es que con estas consultas tan grandes me armo unos lios horrorosos...
No habia caido en que puede haber diferente numero de franjas, gracias por recordarmelo. Se podría calcular de alguna manera dentro de la consulta, o habria qur hacer una aparte?
Gracias de nuevo por tu ayuda! Un saludo!!
  #4 (permalink)  
Antiguo 24/07/2012, 05:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Duda consulta

Se podria pero no se si compensa, es un dato de estructura de negocio que casi es mejor que lo sepas a parte.

En todo caso se podria hacer por ejemplo una tabla con los dias de la semana y el numero de franjas para cada uno si denpende del dia de la semana y luego se podria ver como asociar a cada fecha el numero que le toca y comparar con ese numero....

Pero antes de pensar como hacerlo debes saber si es necesario para las regals de tu negocio.

Habria muchas formas de hacerlo dependiendo de la estructura que tengas y de las reglas de tu negocio pero eso lo sabes tu.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: select, sql, tabla, campos
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:33.