Foros del Web » Programando para Internet » PHP »

problemas con consulta

Estas en el tema de problemas con consulta en el foro de PHP en Foros del Web. Hola de nuevo, Aqui mi problema: tengo 3 tablas: centros, salas y reservas. donde estan enlazados por id (centros.id_centro=salas.id_centro=reservas.id_cen tro) El problema que tengo que ...
  #1 (permalink)  
Antiguo 22/06/2009, 12:19
Avatar de jlmoreno31  
Fecha de Ingreso: mayo-2009
Ubicación: Barcelona
Mensajes: 174
Antigüedad: 15 años
Puntos: 2
Sonrisa problemas con consulta

Hola de nuevo,

Aqui mi problema:

tengo 3 tablas: centros, salas y reservas. donde estan enlazados por id (centros.id_centro=salas.id_centro=reservas.id_cen tro) El problema que tengo que es Para que os hagais una idea. hay muchos centros en diferentes ciudades y cada uno con muchas salas. La tabla reservas, contempla las reservas de las salas de cada centro. Por otro lado hay un formulario en la que el usuario introduce los datos siguientes: (ciudad, fecha, horainicio y horafin) y llama a un archivo php que en teoría le debería listar las salas que están libres.

Pues bien, el problema es que no logro hacerlo. Os pongo la forma en la que lo hago:
Hago una consulta a las tablas centros (para obtener los que son de la ciudad que el usuario pone)
$Sql = mysql_query("select * from centros where ciudad='$ciudad'");
Etc...
Luego hago otra consulta a la tabla salas para escoger las salas de los centros de la consulta anterior.
$centros=mysql_query("select * from salas,centros where centros.id_centro=salas.id_centro");
Para finalizar hago otra consulta para ver que reservas tienen esas salas según las condiciones que el usuario pone en el form:
$reservas =mysql_query("select *from reservas where ... )

Problema: no sale nada ni da error.

Alguna sugerencia? creeis que lo hago bien o me estoy equivocando.

Gracias por vuestro apoyo.
  #2 (permalink)  
Antiguo 22/06/2009, 12:31
Avatar de De_la_Cuesta_13  
Fecha de Ingreso: abril-2009
Ubicación: Cali, Colombia.
Mensajes: 265
Antigüedad: 15 años
Puntos: 14
Respuesta: problemas con consulta

A ver, creo que probablemente sería mejor que manejaras 3 páginas. 1) Usuario escoge ciudad. 2)Usuario escoge sala. En este punto creas un campo oculto en tu formulario, para que no pierdas tu variable de ciudad. 3) Usuario reserva. Entonces guardas la información en una tabla que tenga los siguientes campos: Ciudad(paso 1), Sala(paso 2)y por último la reserva. Mira como te es más conveniente.
Saludos.
  #3 (permalink)  
Antiguo 22/06/2009, 12:35
Avatar de jlmoreno31  
Fecha de Ingreso: mayo-2009
Ubicación: Barcelona
Mensajes: 174
Antigüedad: 15 años
Puntos: 2
Respuesta: problemas con consulta

Hola de la cuesta 13. Gracias por tu respuesta. En realidad ya pensé esa solución pero el problema es que el usuario tiene que perder más tiempo en realizar la búsqueda. Es decir, que sería una buena solución si los usuarios (me incluyo) no fueramos a veces tan... jejeje. Si no encuentro la solución directa, como tengo que subirla ya, lo haré de ese modo. Pero quiero ver si alguien se le ocurre algo para hacerlo directamente.

Gracias por tu post.
  #4 (permalink)  
Antiguo 22/06/2009, 12:54
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Información Respuesta: problemas con consulta

Te propongo el siguiente diagrama entidad relación para tu modelo.



Y la query esta..

Código PHP:
$query "SELECT * FROM reservas res 
  INNER JOIN salas sal ON res.salas_idsalas = sal.idsalas
  INNER JOIN centros cen ON sal.centros_idcentros = cen.idcentros
  WHERE cen.ciudad = '"
.$ciudad."' 
  AND NOT ('"
.$ts_fechahora_inicio."' BETWEEN res.timestamp_inicio AND res.timestamp_fin)"
PD: La variable $ts_fechahora_inicio debe ser el timestamp de la fecha/hora inicio que el usuario ha elegido en el formulario.

Saludos!

Última edición por Synkronice; 22/06/2009 a las 12:56 Razón: Aclaracion sobre la variable $ts_fechahora_inicio
  #5 (permalink)  
Antiguo 22/06/2009, 13:07
Avatar de jlmoreno31  
Fecha de Ingreso: mayo-2009
Ubicación: Barcelona
Mensajes: 174
Antigüedad: 15 años
Puntos: 2
Respuesta: problemas con consulta

Hola Synkronice, gracias por tu respuesta. En realidad el modelo de la BD es tal y como lo tengo yo. Las relaciones son las mismas. Pero mis conocimientos no llegan para entender la query que has posteado.
  #6 (permalink)  
Antiguo 22/06/2009, 13:10
Avatar de jlmoreno31  
Fecha de Ingreso: mayo-2009
Ubicación: Barcelona
Mensajes: 174
Antigüedad: 15 años
Puntos: 2
Respuesta: problemas con consulta

perdona. si que lo entiendo ahora capto la idea. El único problema que tengo es que en la BD la tabla reservas la tengo del siguiente modo:
Id_reserva
Id_centro
Id_sala
Fecha (date)
Hora incicio (Time)
Hora fin (Time)

Aún con esta forma puedo aplicar la query?
  #7 (permalink)  
Antiguo 22/06/2009, 13:14
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: problemas con consulta

Mejoro la query para que pueda filtrarse por el nombre de la sala

Código PHP:
$query "SELECT * FROM reservas res 
  INNER JOIN salas sal ON res.salas_idsalas = sal.idsalas
  INNER JOIN centros cen ON sal.centros_idcentros = cen.idcentros
  WHERE cen.ciudad = '"
.$ciudad."'
  AND sal.nombre = '"
.$nombre_sala."'
  AND NOT ('"
.$ts_fechahora_inicio."' BETWEEN res.timestamp_inicio AND res.timestamp_fin)"
  #8 (permalink)  
Antiguo 22/06/2009, 13:15
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: problemas con consulta

Cita:
Iniciado por jlmoreno31 Ver Mensaje
perdona. si que lo entiendo ahora capto la idea. El único problema que tengo es que en la BD la tabla reservas la tengo del siguiente modo:
Id_reserva
Id_centro
Id_sala
Fecha (date)
Hora incicio (Time)
Hora fin (Time)

Aún con esta forma puedo aplicar la query?
No, ya que la query está adaptada para la estructura que te he propuesto.

Saludos!
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 16:00.