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

[SOLUCIONADO] error creacion tablas horario y mesas

Estas en el tema de error creacion tablas horario y mesas en el foro de SQL Server en Foros del Web. hola buenas noches tengo una duda tengo unas tablas que eh creado el error es que qiero q me muestren las horas libres de cada ...
  #1 (permalink)  
Antiguo 23/03/2013, 21:00
 
Fecha de Ingreso: abril-2012
Ubicación: surquillo
Mensajes: 44
Antigüedad: 12 años
Puntos: 0
error creacion tablas horario y mesas

hola buenas noches tengo una duda
tengo unas tablas que eh creado el error es que qiero q me muestren las horas libres de cada mesa pero no me sale

create TABLE horarios_(
id_hora int primary key,
horas time
)

CREATE TABLE mesa_(
id_mesa int primary key,
nombre varchar(10),
)

CREATE TABLE reservaciones_(
id_rese int primary key,
mesa_id INT,
hora_entrada time,
hora_salida time,
fecha varchar(20)
)


INSERT INTO horarios_(id_hora,horas) values (1,'08:00')
INSERT INTO horarios_(id_hora,horas) values (2,'08:30')
INSERT INTO horarios_(id_hora,horas) values (3,'09:00')
INSERT INTO horarios_(id_hora,horas) values (4,'09:30')
INSERT INTO horarios_(id_hora,horas) values (5,'10:00')
INSERT INTO horarios_(id_hora,horas) values (6,'10:30')
INSERT INTO horarios_(id_hora,horas) values (7,'11:00')
INSERT INTO horarios_(id_hora,horas) values (8,'11:30')
INSERT INTO horarios_(id_hora,horas) values (9,'12:00')


INSERT INTO mesa_ values (1,'mesa1')
INSERT INTO mesa_ values (2,'mesa2')
INSERT INTO mesa_ values (3,'mesa3')

INSERT INTO reservaciones_ values (1,3,'08:00','09:00',convert(varchar(20),GETDATE() ,101))
INSERT INTO reservaciones_ values (2,3,'11:00','12:00',convert(varchar(20),GETDATE() ,101))

cuando pongo esta consulta
select DISTINCT horas from horarios_,reservaciones_
where CONVERT(VARCHAR(8),horas,108) not between hora_entrada and hora_salida and mesa_id=3

me bota las horas disponibles pero de una sola mesa cuando le ingreso
este insert de nuevo con el mismo codigo de mesa pero con diferentes horas
INSERT INTO reservaciones_ values (2,3,'11:00','12:00',convert(varchar(20),GETDATE() ,101))

me bota todas las horas reservadas lo que qiero es q me muestre todas las horas disponibles ya use distintic no qiero q me repita los datos gracias x su ayuda
  #2 (permalink)  
Antiguo 24/03/2013, 12:22
 
Fecha de Ingreso: abril-2012
Ubicación: surquillo
Mensajes: 44
Antigüedad: 12 años
Puntos: 0
Respuesta: error creacion tablas horario y mesas

Nadie me puede ayudar o.o
  #3 (permalink)  
Antiguo 25/03/2013, 08:17
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: error creacion tablas horario y mesas

Ve que tal te va con esta consulta, te mostrará todas las horas de tu tabla horarios donde las horas sean distintas a las que aparecen en hora_entrada y hora_salida de la tabla reservaciones
a ver si con esto te acerco mas a lo que quieres, saludos ;)

select distinct horas from horarios_ where horas not in (select distinct hora_entrada from reservaciones_ union select distinct hora_salida from reservaciones_)
  #4 (permalink)  
Antiguo 25/03/2013, 08:33
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: error creacion tablas horario y mesas

Amigo, creo haberlo solucionado con un cursor, mira el siguiente código


--Guardamos las horas en una tabla temporal
select distinct horas into #Temporal from horarios_

-- Declaracion de variables para el cursor
DECLARE @hora1 datetime,
@hora2 datetime
-- Declaración del cursor
DECLARE Horas CURSOR FOR
SELECT hora_entrada, hora_salida
FROM reservaciones_
-- Apertura del cursor
OPEN Horas
-- Lectura de la primera fila del cursor
FETCH Horas INTO @hora1, @hora2
WHILE (@@FETCH_STATUS = 0 )
BEGIN
delete from #Temporal where horas >= @hora1 and horas <= @hora2
FETCH Horas INTO @hora1, @hora2
END
-- Cierre del cursor
CLOSE Horas
-- Liberar los recursos
DEALLOCATE Horas

--Muestra resultado
Select * from #Temporal

Lo ejecute y por lo menos me da el resultado que buscas, espero te sirva de algo, saludos ;)
  #5 (permalink)  
Antiguo 25/03/2013, 09:22
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: error creacion tablas horario y mesas

a ver vamos por partes para empezar:

create TABLE horarios_(
id_hora int primary key,
horas time
)


CREATE TABLE reservaciones_(
id_rese int primary key,
mesa_id INT,
hora_entrada time,
hora_salida time,
fecha varchar(20)
)


Aqui tienes los valores horas en la tabla horarios y repites los mismos valores de horas para la tabla reservaciones, eso no esta bien para la normalizacion de tu base de datos ya que estas repitiendo los horarios en 2 tablas creandote redundancia de informacion inecesaria, como te lo plantee desde un inicio, deberias de hacer tu tabla de esta manera:

create TABLE horarios_(
id_hora int primary key,
hora_inicio time,
hora_fin time
)


CREATE TABLE reservaciones_(
id_rese int primary key,
mesa_id INT,
id_horario
fecha varchar(20)
)


asi te evitas la redundancia de informacion.

http://es.wikipedia.org/wiki/Normali...bases_de_datos
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 25/03/2013, 09:36
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: error creacion tablas horario y mesas

y para lo que necesitas sin uso de cursores:

Código SQL:
Ver original
  1. CREATE TABLE #horarios(
  2. id INT,
  3. hora_inicio INT,
  4. hora_fin INT
  5. )
  6.  
  7. CREATE TABLE #mesa(
  8. id INT,
  9. nombre VARCHAR(10)
  10. )
  11.  
  12. CREATE TABLE #reservaciones(
  13. id INT,
  14. id_horario INT,
  15. id_mesa INT,
  16. fecha VARCHAR(20)
  17. )
  18.  
  19.  
  20. INSERT INTO #horarios VALUES (1,1,2)
  21. INSERT INTO #horarios VALUES (2,2,3)
  22. INSERT INTO #horarios VALUES (3,3,4)
  23. INSERT INTO #horarios VALUES (4,4,5)
  24.  
  25.  
  26. INSERT INTO #mesa VALUES (1,'mesa1')
  27. INSERT INTO #mesa VALUES (2,'mesa2')
  28. INSERT INTO #mesa VALUES (3,'mesa3')
  29.  
  30. INSERT INTO #reservaciones VALUES (1,1,1,CONVERT(VARCHAR(20),GETDATE(),101))
  31. INSERT INTO #reservaciones VALUES (2,2,1,CONVERT(VARCHAR(20),GETDATE(),101))
  32. INSERT INTO #reservaciones VALUES (5,3,1,CONVERT(VARCHAR(20),GETDATE(),101))
  33. INSERT INTO #reservaciones VALUES (6,1,2,CONVERT(VARCHAR(20),GETDATE(),101))
  34. INSERT INTO #reservaciones VALUES (7,3,2,CONVERT(VARCHAR(20),GETDATE(),101))
  35. INSERT INTO #reservaciones VALUES (8,4,1,CONVERT(VARCHAR(20),GETDATE(),101))
  36. INSERT INTO #reservaciones VALUES (9,1,3,CONVERT(VARCHAR(20),GETDATE(),101))
  37.  
  38. INSERT INTO #reservaciones VALUES (3,1,1,CONVERT(VARCHAR(20),dateadd(dd,1,GETDATE()),101))
  39. INSERT INTO #reservaciones VALUES (4,2,2,CONVERT(VARCHAR(20),dateadd(dd,1,GETDATE()),101))
  40.  
  41.  
  42.  
  43. --Horas ocupadas
  44. SELECT m.nombre,h.hora_inicio,h.hora_fin,r.fecha FROM #reservaciones AS r,#horarios AS h, #mesa AS m
  45. WHERE r.id_horario=h.id AND m.id=r.id_mesa AND fecha=CONVERT(VARCHAR(20),GETDATE(),101)
  46. AND id_mesa=1 AND h.id IN (SELECT id FROM #horarios WHERE (hora_inicio BETWEEN 1 AND 3) AND (hora_fin
  47.  BETWEEN 1 AND 3) )
  48. ORDER BY m.nombre
  49. --Horas Libres
  50. SELECT DISTINCT hora_inicio,hora_fin,nombre,fecha FROM #reservaciones AS r,#horarios AS h, #mesa AS m
  51. WHERE fecha=CONVERT(VARCHAR(20),GETDATE(),101) AND CONVERT(VARCHAR(20),h.id) + '|' + CONVERT(VARCHAR(20),m.id) NOT IN (
  52. SELECT CONVERT(VARCHAR(20),id_horario) + '|' + CONVERT(VARCHAR(20),id_mesa) FROM #horarios,#reservaciones WHERE #horarios.id=#reservaciones.id_horario AND #reservaciones.fecha=CONVERT(VARCHAR(20),GETDATE(),101)
  53. )
  54. ORDER BY nombre
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 25/03/2013, 09:38
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: error creacion tablas horario y mesas

Cita:
Iniciado por losaltlv Ver Mensaje
Nadie me puede ayudar o.o
Es domingo, el horario de atencion al cliente es de 9:00 AM a 6:00 PM de lunes a viernes(horario del pacifico)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 26/03/2013, 00:17
 
Fecha de Ingreso: abril-2012
Ubicación: surquillo
Mensajes: 44
Antigüedad: 12 años
Puntos: 0
Respuesta: error creacion tablas horario y mesas

HOLA libras muchas gracias por la ayuda me preguntaba si me podrias explicar el codigo por favor muchas gracias ..

Última edición por losaltlv; 26/03/2013 a las 00:19 Razón: error
  #9 (permalink)  
Antiguo 26/03/2013, 09:18
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: error creacion tablas horario y mesas

que parte del codigo no entiendes??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 26/03/2013, 09:47
 
Fecha de Ingreso: abril-2012
Ubicación: surquillo
Mensajes: 44
Antigüedad: 12 años
Puntos: 0
Respuesta: error creacion tablas horario y mesas

t dire los comandos que no entiendo
1) + '|' +
2)(hora_inicio between 1 and 3) por que le pones 3
  #11 (permalink)  
Antiguo 26/03/2013, 10:06
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: error creacion tablas horario y mesas

Cita:
Iniciado por losaltlv Ver Mensaje
t dire los comandos que no entiendo
1) + '|' +
2)(hora_inicio between 1 and 3) por que le pones 3
El primero es un pequeño "truco" para obtener valores iguales donde necesitas revisar 2 campos, conviertes los valores a varchar, o si son varchar asi los dejas concatenandole un separador(esto es mas por estetica que otra cosa jejeje) y ya los puedes comparara

el 3, es solo de ejemplo, en los datos que te puse estoy usando los valores de las horasen entero 1,2,3,4,5 asi que en el query quiero que me regrese las mesas reservadas entre la 1 y las 3 :P

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 26/03/2013, 10:22
 
Fecha de Ingreso: abril-2012
Ubicación: surquillo
Mensajes: 44
Antigüedad: 12 años
Puntos: 0
Respuesta: error creacion tablas horario y mesas

man otra consulta tu codigo esta bien pero supongamos que quiero tener las tablas asi

CREATE TABLE #horarios(
id int,
hora_inicio int,
)
en la tabla horarios tenga todas las horas que se atiende en el restaurante
y en la tabla reservacion yo ingrese manualmente la hora de salida como haria eso ?
CREATE TABLE #mesa(
id int,
nombre varchar(10)
)

CREATE TABLE #reservaciones(
id int,
id_horario int,
id_mesa int,
fecha varchar(20)
)
gracias por tu ayuda de antemano y la explicacion si que me sirvio de mucho y veo que aun me falta mucho por aprender jaja
  #13 (permalink)  
Antiguo 26/03/2013, 10:50
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: error creacion tablas horario y mesas

aqui lo que podrias hacer seria tener en tu tabla de horarios la hora inicio y la hora final, y en tu tabla de reservaciones poner algo asi:

tu capturas la hora inicial y la hora final digamos(con datos de hora 1,2,3) que la hora de ingreso es la 1 y la de salida las 3 asi que la mesa estara apartada todo el tiempo entre la hora 1 y la 3.

algo asi:


Código SQL:
Ver original
  1. CREATE TABLE #horarios(
  2. id INT,
  3. hora_inicio INT,
  4. hora_fin INT
  5. )
  6.  
  7. CREATE TABLE #mesa(
  8. id INT,
  9. nombre VARCHAR(10)
  10. )
  11.  
  12. --drop table #reservaciones
  13. CREATE TABLE #reservaciones(
  14. id INT,
  15. id_horario_i INT,
  16. id_horario_f INT,
  17. id_mesa INT,
  18. fecha VARCHAR(20)
  19. )
  20.  
  21.  
  22. INSERT INTO #horarios VALUES (1,1,2)
  23. INSERT INTO #horarios VALUES (2,2,3)
  24. INSERT INTO #horarios VALUES (3,3,4)
  25. INSERT INTO #horarios VALUES (4,4,5)
  26.  
  27.  
  28. INSERT INTO #mesa VALUES (1,'mesa1')
  29. INSERT INTO #mesa VALUES (2,'mesa2')
  30. INSERT INTO #mesa VALUES (3,'mesa3')
  31.  
  32. INSERT INTO #reservaciones VALUES (1,1,2,1,CONVERT(VARCHAR(20),GETDATE(),101))
  33. INSERT INTO #reservaciones VALUES (1,3,4,1,CONVERT(VARCHAR(20),GETDATE(),101))
  34.  
  35.  
  36.  
  37.  
  38.  
  39. --Horas ocupadas
  40. SELECT m.nombre,h.hora_inicio,h.hora_fin,r.fecha FROM #reservaciones AS r,#horarios AS h, #mesa AS m
  41. WHERE r.id_horario_i=h.id AND m.id=r.id_mesa AND fecha=CONVERT(VARCHAR(20),GETDATE(),101)
  42. AND id_mesa=1 AND h.id IN (SELECT id FROM #horarios WHERE (hora_inicio BETWEEN 1 AND 5) AND (hora_fin
  43.  BETWEEN 1 AND 5) )
  44. ORDER BY m.nombre
  45.  
  46. --Horas Libres
  47. SELECT DISTINCT hora_inicio,hora_fin,nombre,fecha FROM #reservaciones AS r,#horarios AS h, #mesa AS m
  48. WHERE fecha=CONVERT(VARCHAR(20),GETDATE(),101) AND CONVERT(VARCHAR(20),h.id) + '|' + CONVERT(VARCHAR(20),m.id) NOT IN (
  49. SELECT CONVERT(VARCHAR(20),id_horario_i) + '|' + CONVERT(VARCHAR(20),id_mesa) FROM #horarios,#reservaciones WHERE #horarios.id=#reservaciones.id_horario_i AND #reservaciones.fecha=CONVERT(VARCHAR(20),GETDATE(),101)
  50. )
  51. ORDER BY nombre
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #14 (permalink)  
Antiguo 26/03/2013, 11:09
 
Fecha de Ingreso: abril-2012
Ubicación: surquillo
Mensajes: 44
Antigüedad: 12 años
Puntos: 0
Respuesta: error creacion tablas horario y mesas

hola amigo gracias pero sabes mi idea es esta osea el restaurante tendra un horario de reservaciones que es un intervalo de 30 minutos empezando de 08:00 hasta las 23:00

supongamos que yo reservo una mesa a las 08:00 hasta las 09:00 quiero que me muestre todas las horas que estan disponibles pero el detalle es que yo por cada reservacion no voy a insertar un nuevo horario solo voy a jalarlo de la tabla horario y la reservacion la hora de salida es dependiendo no tiene hora de salida fija la hora de salida se ingresara manualmente dependiendo del tipo de mesa mmmm muchas gracias :D
  #15 (permalink)  
Antiguo 26/03/2013, 11:15
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: error creacion tablas horario y mesas

eso ya depende de tu programacion, aqui la idea es que obtengas el id de la hora inicio y el id de la hora fin y asi los puedes usar en la tabla de reservaciones :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #16 (permalink)  
Antiguo 26/03/2013, 11:25
 
Fecha de Ingreso: abril-2012
Ubicación: surquillo
Mensajes: 44
Antigüedad: 12 años
Puntos: 0
Respuesta: error creacion tablas horario y mesas

mi idea seria reemplazar el id de hora de salida por uno que ingrese yo solo la idea y en la tabla horarios solo tenga los campos id y horas
  #17 (permalink)  
Antiguo 26/03/2013, 11:30
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: error creacion tablas horario y mesas

lo que te dije es mi idea de como lo puedes hacer ya depende de ti el camino que elijas aunque te reitero lo puedes hacer como quieres con la estructura que te pase.......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #18 (permalink)  
Antiguo 26/03/2013, 11:34
 
Fecha de Ingreso: abril-2012
Ubicación: surquillo
Mensajes: 44
Antigüedad: 12 años
Puntos: 0
Respuesta: error creacion tablas horario y mesas

Si bro gracias por todo doy por cerrado :d

Etiquetas: horario, insert, select, tabla, tablas
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 15:05.