Baia Posted May 27, 2013 at 08:37 PM Report #509257 Posted May 27, 2013 at 08:37 PM Boas alguém me pode ajudar aqui com uma query?? 🙂 basicamente queria retornar os quartos que estão livres para um determinado intervalo de datas. tenho estas 3 tabelas, e queria que ao passar duas datas me fosse retornado o id dos espaços que não estão ocupados entre essas datas(penso que o esquema relacional seja correto) com esta query, SELECT id FROM espacos WHERE NOT EXISTS (SELECT id_espaco FROM espacos_reservados WHERE id_espaco = espacos.id) retorna os espacos que não estão nos" espacos_reservados", mas agora falta as datas(que estão na outra tabela, "estadias") 😕 obrigado 😉
HappyHippyHippo Posted May 27, 2013 at 08:46 PM Report #509259 Posted May 27, 2013 at 08:46 PM achas que consegues fazer o inverso ? - saber os espaços que tem reservas dentro de duas datas pré-determinadas IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Baia Posted May 27, 2013 at 08:51 PM Author Report #509261 Posted May 27, 2013 at 08:51 PM o inverso é igual ao que quero fazer, apenas trocando os operadores e as condições
HappyHippyHippo Posted May 27, 2013 at 09:19 PM Report #509271 Posted May 27, 2013 at 09:19 PM eu não perguntei o que é o inverso, eu perguntei se sabes fazer ... (o português é língua assim tão difícil ?) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Baia Posted May 27, 2013 at 09:29 PM Author Report #509276 Posted May 27, 2013 at 09:29 PM Ora sabendo interpretar o português, já que são os dois idênticos, se não sei fazer um, também não sei fazer o outro 😉
HappyHippyHippo Posted May 27, 2013 at 09:32 PM Report #509279 Posted May 27, 2013 at 09:32 PM já que são os dois idênticos, se não sei fazer um, também não sei fazer o outro 😉 não são idênticos, logo A não implica B. cria então este SQL : lista todas as entradas de "estadias" que se encontram registadas dentro de duas datas pré-determinadas IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Baia Posted May 27, 2013 at 09:48 PM Author Report #509290 Posted May 27, 2013 at 09:48 PM penso que seja isto: SELECT estadias.* FROM estadias WHERE estadias.data_inicio BETWEEN DATE(2013 - 05 - 27) AND DATE(2013 - 05 - 30) OR estadias.data_fim BETWEEN DATE(2013 - 05 - 27) AND DATE(2013 - 05 - 30) retorna se a data de fim ou de inicio se encontrar entre as datas especificadas
HappyHippyHippo Posted May 27, 2013 at 09:54 PM Report #509293 Posted May 27, 2013 at 09:54 PM (edited) quase: SELECT * FROM estadias WHERE data_inicio <= '2013-05-30' AND data_fim >= '2013-05-27' (ps : se o tipo de dados dos campos 'data_fim' e 'data_inicio' forem correctos) achas que consegues adicionar SQL para relacionar a tabela "espacos_reservados" de modo a ter os id's dos espaços ? Edited May 27, 2013 at 09:55 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Baia Posted May 27, 2013 at 10:01 PM Author Report #509295 Posted May 27, 2013 at 10:01 PM SELECT espacos_reservados.id_espaco FROM espacos_reservados INNER JOIN estadias ON espacos_reservados.id_estadia = estadias.id WHERE estadias.data_inicio <= '2013-05-30' AND estadias.data_fim >= '2013-05-27' certo?
HappyHippyHippo Posted May 27, 2013 at 10:02 PM Report #509297 Posted May 27, 2013 at 10:02 PM sim agora é só usar isso como o subquery do query apresentada no teu primeiro post IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Baia Posted May 27, 2013 at 10:20 PM Author Report #509301 Posted May 27, 2013 at 10:20 PM (edited) hum, assim? SELECT id FROM espacos WHERE NOT EXISTS (SELECT espacos_reservados.id_espaco FROM espacos_reservados INNER JOIN estadias ON espacos_reservados.id_estadia = estadias.id WHERE estadias.data_inicio <= '2013-05-30' AND estadias.data_fim >= '2013-05-27') os as datas são do tipo "data" Edited May 28, 2013 at 08:02 AM by brunoais geshi
HappyHippyHippo Posted May 27, 2013 at 10:30 PM Report #509309 Posted May 27, 2013 at 10:30 PM agora experimenta na tua base de dados (com datas apropriadas) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Baia Posted May 27, 2013 at 10:38 PM Author Report #509312 Posted May 27, 2013 at 10:38 PM hum... o select funciona(retorna o id do espaço que se encontra registado dentro das duas datas) agora como subquery não está a retornar nada 😕 .
HappyHippyHippo Posted May 27, 2013 at 11:07 PM Report #509316 Posted May 27, 2013 at 11:07 PM (edited) estranho ... e o not in ? SELECT id FROM espacos WHERE id not in (SELECT id_espaco FROM espacos_reservados INNER JOIN estadias ON espacos_reservados.id_estadia = estadias.id WHERE data_inicio <= '2013-05-30' AND data_fim >= '2013-05-27') Edited May 27, 2013 at 11:07 PM by HappyHippyHippo 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Baia Posted May 27, 2013 at 11:11 PM Author Report #509318 Posted May 27, 2013 at 11:11 PM estranho ... e o not in ? SELECT id FROM espacos WHERE id not in (SELECT id_espaco FROM espacos_reservados INNER JOIN estadias ON espacos_reservados.id_estadia = estadias.id WHERE data_inicio <= '2013-05-30' AND data_fim >= '2013-05-27') 👍 perfeito. Muito obrigado pela disposição
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now