Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

biza

Pesquisa entre duas datas

Recommended Posts

Viva pessoal,

Estou com uma dificuldade de fazer uma situação ...

gostaria de efectuar uma consulta entre duas datas, devolvendo o numero de dias consultados, até ai tudo bem , o problema esta na seguinte situação, tenho estipuladas duas épocas o que quer dizer que por vezes a pessoa ao efectuar a selecção poderá seleccionar a época A e parte da Época B.

O que pretendo fazer é devolver os dias referentes a época A e os referentes a época B . Tem como me ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só usar between mesmo.

faça uma consulta mais abrangente entre as datas. Ex:

 

$data01 = 01/01/2015

$data02 = 31/01/2015

 

Vamos supor que existe uma 'época' entre 15/01 e 31/01.

 

Depois de trazer o resultado da consulta usando between, é só verificar se o registro corrente está dentro da época. Aí você faz o que quiser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok essa parte eu entendi, mas imagina que a 'epoca' de 15/01 até 25/01/ têm um preço e de 26/01 a 31/01 outro como posso resolver esse problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A primeira situação e esta última são completamente diferentes... afinal de contas, qual é o resultado que você espera obter desta consulta?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos por partes,

"gostaria de efectuar uma consulta entre duas datas, devolvendo o numero de dias consultados, até ai tudo bem , o problema esta na seguinte situação, tenho estipuladas duas épocas o que quer dizer que por vezes a pessoa ao efectuar a selecção poderá seleccionar a época A e parte da Época B".

 

Agora imagine:

as épocas têm preços diferenciados, "mas imagina que a 'epoca' de 15/01 até 25/01/ têm um preço e de 26/01 a 31/01 outro como posso resolver esse problema"

 

O resultado, esperado seria uma contagem dos dias com o preço de época A e a contagem dos dias com preço da época B... a partir dai eu ja poderei modelar o problema da forma que pretender.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use o count para contar os dois e o group by para agrupar pelos valores, no modelo que você passou vai funcionar, mas se por exemplo vc tiver:

 

15/01 a 20/01 - R$150,00

21/01 a 23/01 - R$ 160,00

24/01 a 31/01 - R$ 150,00

 

Já não vai funcionar... ou seja, se existirem valores iguais para épocas diferentes, ai o que passei vai retornar um erro baseado na sua lógica...

Compartilhar este post


Link para o post
Compartilhar em outros sites

os valores nunca vão ser iguais e épocas só serão duas sempre, será que voce me pode dar um exemplo? estou mesmo com dificuldade em fazer isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

SELECT COUNT(dias) as total, dias, valor FROM tabela WHERE dias BETWEEN '$data1' AND '$data2' GROUP BY valor

 

valor = campo onde estará o valor (deve ser um campo adequado para valores monetários);

dias = campo da data (deve ser um campo adequado para datas);

$data1 = data inicial no formato adequado;

$data2 = data final no formato adequado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom ESerra isto não esta fácil... vou-lhe mostrar as minhas tabelas...

 

#tbl_epocas

id_epocas

epoca_initA

epoca_endA

epoca_initB

epoca_endB

epoca_initC

epoca_endC

produto_id

 

#tbl_epoca_preco

id_epoca_preco

qnt_tipo

adulto

crianca

preco1

preco2

preco3

produto_id

 

#tbl_produto

id_produto

nome_produto

 

o problema esta no seguinte a selecção de verificar entre a tabela época em que intervalo se situa, contando os dias pertencentes ao preço, e ao preço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como esta é uma questão de modelagem/query, movendo de PHP para MySQL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi a tabela de "epocas" está mal modelada pois um registro aponta pra 3 épocas e preços distintos, seria isto !?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Motta,

Sim o utilizador no painel de administração segundo o alojamento tem a hipótese de definir 3 épocas "alta","baixa","media", de tal forma que quando o usuário normal através de um data picker selecciona o espaço entre datas deveria verificar qual das épocas em que caiu a consulta, após isso a ideia seria efectuar uma contagem dos dias requeridos. agora imaginando que o intervalo teria metade dos dias com "alta" outra metade "media" ele iria devolver a quantidade de dias com o preço 1 e a quantidade de dias com o preço 2.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao meu ver o primeiro passo seria normalizar a tabela , a sql para consultar isto seria quase trivial.

 

Se eu tivrr tempo amanhã te posto uma solução

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria algo assim , apenas um rascunho , deve ter erros

##tbl_tipo_epocas
id_tipo_epoca
descricao
#tbl_epocas
id_epoca
tipo_epoca
epoca_init
epoca_end
produto_id
#tbl_tipo_diaria
id_tipo_diaria (adulto crianca)
descricao
#tbl_epoca_preco
id_epoca_preco
id_epoca
produto_idid_tipo_diaria
valid_init
valid_end
preco
#tbl_produto
id_produto
nome_produto

--precos

select *
from   tbl_epocas , tbl_epoca_preco
where  tbl_epocas.id_epoca , tbl_epoca_preco.id_epoca
and    currdate() between tbl_epoca_preco.valid_init and coalesce(tbl_epoca_preco.valid_init,currdate()) --preco "hoje"

and    ((<data busca inicio> between tbl_epocas.epoca_init and tbl_epocas.epoca_end and
         <data busca final> between tbl_epocas.epoca_init and tbl_epocas.epoca_end)
         or
         (tbl_epocas.epoca_init between <data busca inicio> and <data busca final> and
          tbl_epocas.epoca_end between <data busca inicio> and <data busca final>)

Veja se ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado motta , pela ajuda , mas as tabelas que me foram dadas , foram aquelas e tenho de modelar o problema com elas .

Me corrija o raciocinio se não estiver correcto

A ideia será através de um data picker são seleccionadas duas datas.

O que devo fazer neste caso será seleccionar a tabela [#tbl_epocas] e trazer todos as linhas afectas ao produto_id (a partida só mostra 1).

Imaginando que o que devolve é o seguinte :

 

|id| inicioA | terminoA | inicioB | terminoB | inicioC | terminoC |

--------------------------------------------------------------

|1|20-1-2015|25-1-2015|26-1-2015|30-1-2015|10-8-2015|20-9-2015|

 

 

Agora a questão é imagina que com o data picker terei de verificar se existem dias a cair dentro destas situações, tipo sera que com if's consigo resolver a questão?

 

tipo :

 

if($datapicker1 >='inicioA' && $datapicker2 <=terminoA ){

aqui so mostra os dias que calharam este esta data

///mostra preco1
}

else if($datapicker1 >='inicioB' && $datapicker2 <=terminoB){

aqui so mostra os dias que calharam este esta data

///mostra preco2
}

else if($datapicker1 >='inicioC' && $datapicker2 <=terminoC){

aqui so mostra os dias que calharam este esta data

///mostra preco3
}

 

A logica que eu pensei seria assim, desculpem a "má explicação"

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.