Jump to content
Sign in to follow this  
CloudPT

Filtrar dados

Recommended Posts

CloudPT

Boas Tardes.

Eu tenho a tabela seguinte:

QuartosDisponiveis Data

2 2013-06-23

3 2013-06-24

1 2013-06-25

0 2013-06-26

4 2013-06-27

E quando um cliente inserir a sua data de entrada e a data de saida tem de aparecer se existe quarto ou não.

Fiz o seguinte select:

"SELECT * FROM Quartos WHERE (Entrada >= '$entrada' AND Entrada < '$saida' AND $nQuartos <= QuartosDisponiveis)";

O problema é quando eu digito o seguinte

Entrada 2013-06-23

Saida 2013-06-27

Aparece:

QuartosDisponiveis Data

2 2013-06-23

3 2013-06-24

1 2013-06-25

4 2013-06-27

E não deveria aparecer nada pois no dia 2013-06-26 não existe quarto.

Eu pensei fazer o seguinte contar o numero de dias desde 23 até 27 (neste caso 5) e contar o numero de dias do resultado ( neste caso 4) caso não fossem iguais não listava (4 <> 5) mas, deve haver maneira mais simples.

Obrigado pela atenção.

Edited by CloudPT

Share this post


Link to post
Share on other sites
NunoDinis

"SELECT * FROM Quartos WHERE (Entrada >= '$entrada' AND Saida <= '$saida' AND $nQuartos <= QuartosDisponiveis)";

Penso que seja assim que querias que a query fosse feita..


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
CloudPT

Obrigado pela atenção.

Não essa é igual à que eu tenho em cima pois, imagine que eu quero reservar um quarto com entrada a 23-06-2013 e saida a 30-06-2013 e imagine que no dia 27 não tenho quartos disponiveis o que ia acontecer ? Ia listar os quarto todos que tem quartos do dia 23,24,25,26,28,29 mas, não listava o dia 27 o que é um problema o objectivo é caso isso aconteça não aparecer nenhum quarto. Percebeu ?

Share this post


Link to post
Share on other sites
HappyHippyHippo

antes de mais, a tabela que tens não parece fazer sentido para o resultado que pretendes :

listar os quarto todos que tem quartos do dia 23,24,25,26,28,29

até porque a própria afirmação também não é a melhor que se pode pedir ...

estás a dizer que se queres mercar um quarto entre o dia X e o dia X+N, deverá aparecer todos os dias {X , ... , X+N}, se nenhum destes registos tiver o valor 0 na coluna "QuartosDisponiveis" ? e não listar nenhum caso contrário ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
CloudPT

Só existem 2 opções, lista ou não lista.

Lista caso o intervalo das datas de entrada e de saida não tiver nenhum '0' nos "QuartosDisponiveis".

Não Lista caso o intervalo das datas de entrada tiver um '0' nos "QuartosDisponiveis".

Share this post


Link to post
Share on other sites
HappyHippyHippo

se isso é um trabalho académico, eu mandava o prof dar uma volta ao bilhar grande porque anda a ensinar más práticas de criação de base de dados.

se é um trabalho profissional, apagava tudo e fazia como deveria ser.

no entanto para resolver a tua situação, é processo será muito complicado, envolvendo sub-queries:

o que pretendes é conseguido desta forma:

select *
 from Quartos
where Data >= '$entrada'
  and Data <= '$saida'

  /* até aqui tudo pacífico */
  /* agora necessitas de invalidar os registos caso exista um registo dentro das datas que tem o valor 0 na coluna "QuartosDisponiveis" */

  and (select count(QuartosDisponiveis)
        where Data >= '$entrada'
          and Data <= '$saida'
          and QuartosDisponiveis = 0) = 0


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
CloudPT

Sou vou ter essa cadeira para o ano. Só queria treinar um pouco e assim ajudava um amigo que tem uma residencial, podia dar uma ajuda. Qual a maneira melhor para realizar o projecto?

Ele consiste numa reserva de quartos online tenho uma Tabela de Cliente e eu Tabela de Quartos Disponíveis.

Obrigado pela atenção.

Share this post


Link to post
Share on other sites
HappyHippyHippo

ter uma tabela com "quartos disponíveis" não tem sentido, isto porque (pelo modelo apresentado)

- necessitas de ter 365 (366) registos por ano

- não tens qualquer tipo de informação que quarto individual que se encontra disponível

- não tens informação de quanto tempo um quarto individual se encontra indisponível

o que deverias ter seria uma tabela quartos que lista os quartos existentes e uma tabela reservas que guarda que quarto, cliente, e data inicial/data final da reserva

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.