Jump to content

Filtrar dados


CloudPT

Recommended Posts

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
Link to comment
Share on other sites

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 ?

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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
Link to comment
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
×
×
  • 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.