Consulta MySQL de cuatro tablas

Quisiera ver si me puedes ayudar con una consulta, ya que no se por donde empezar, supongo que tener que usar LEFT JOIN o GROUP BY, pero es que no me entero muy bien de como usar estas consultas.
Pues bien, me han encargado en el hotel donde trabajo que haga una aplicación para la reserva de restaurantes y estas son las tablas que he creado:
Restaurantes Mesas Reservas Clientes
Cod cod cod cod
nom codRest codMes codReserv
                                ref                 fech                    nom
                                MaxPer hora hab
                                                                                Res (boolean) si ha reservado este
Cliente o no
Pues necesito mostrar una vista con la siguiente información (Esto tiene que ser diferente dependiendo del restaurante que se quiera consultar en ese momento):
Hora (hora) - Hora de la reserva
Mesa (ref) - Referencia de la mesa donde se van a sentar
Nº Pers (as cont) - Numero de clientes relacionados que se van a sentar en esa mesa
Cliente (nom) - Nombre del cliente que hizo la reserva
Habitacion (hab) - Habitacion donde esta alojado el cliente que hizo la reserva
Tambien quería preguntarte si por medio de la consulta podria hacer la vista tambien por las horas que se les diga aunque no tengan ninguna reserva, es decir:
     Hora      |       Mesa        |        Nº Pers      |      Cliente       |       Habitacion
    19:00 | AS-01 | 2 | Pepito | COL-02
    19:00      |                        |                           |                         |
    19:30      |       AS-03        |            4             |       Juan          |          CAD-05
Esto es lo que necesito.

1 respuesta

Respuesta
1
Como estas
Esta bien, tu consulta
Aunque eso de mostrar registro vacíos, no lo entiendo bien
Supuestamente, en tu tabla se registra, todas las reservaciones, ¿cómo tendrías una reservación vacía?
Hola, ya he resuelto la primera duda (pensé que era más difícil :)). He hecho esta consulta:
select reservas.hora, mesas.ref,
(select COUNT(clientes.cod)
from reservas, clientes
where (reservas.cod = clientes.codReserv)) as 'numCli',
clientes.nom, clientes.hab
from mesas, reservas, clientes
where ((mesas.codRest = 2) and (mesas.cod = reservas.codMes) and (reservas.fech = '2008-10-31') and (reservas.cod = clientes.codReserv) and (clientes.res = 1))
order by reservas.hora asc
¿Está bien hecha la consulta o crees que hay alguna manera mejor de hacerla? Y por último ¿Crees qué se puede hacer eso de mostrar una tabla con las horas aunque estén vacías como te pregunte anteriormente?
Muchas Gracias.
Daniel.
No hay reservas vacías, por eso pregunto si de alguna manera en la consulta se pueden poner valores fijos, me explico.
En la tabla del programa donde los jefes de restaurantes ven las reservas que hay, siempre tengo que mostrar las horas del día donde se pueden hacer las reservas y si hay reserva mostrar los datos y si no la hay dejar la tabla vacía pero solo mostrando la hora para darle doble click en la ella y poder hacer la reserva:
    Hora | Datos de la reserva
   19:30 | Reserva 1
   19:30 | Vacío
   19:30 | Vacío
   19:30 | Reserva 2
   19:45 | Vacío
   20:00 | Reserva 3
.
.
.
Bueno creo que esta un poco más claro, de todas formas si no lo entiendes dejalo, al final he metido las horas a mano con los datos vacíos para poder mostrarlo :S, aunque seria muy interesante poder hacer algo de esto, ya que si no se hacen reservas a esas horas vacías me va a quedar la tabla de la BD con muchos campos que no sirven para nada.
Muchas Gracias. Un Saludo.
Daniel.
Ahora ya entendía
Tienes mucha razón eso de crear registros vacíos(son innecesarios)
Lo que puedes hacer es crear una tabla, almacenando las horas de todos el día y cuando quieras mostrar las reservas, lo único que haces es relacionar las tabnla horas con la de reservas, claro on un LEFT OUTER JOIN en los campos hora, y así te mostrara todas las horas del tabla HORAS y relacionado con los regiustro de la tabal reserva y listo.
Tabla Horas | tabla reservas
*6:00 am                                    |        6:00 am  | reserrva1
*7:00 am                                    |        8:00 am  |reserva2,etc
*8:00 am,etc
Y listo, cuando se relacione te mostrara como tu quieres.
Ah perfecto, no había visto eso de LEFT OUTER JOIN y la verdad es que no se me había ocurrido hacer una tabla solo con las horas del día y relacionarlas con las reservas.
Bueno muchas gracias, me has servido de gran ayuda.
Un Saludo, Daniel.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas