biza 1 Denunciar post Postado Janeiro 16, 2015 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
Lucas Guima 164 Denunciar post Postado Janeiro 21, 2015 Dê exemplos de época, em vez de variáveis. Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Janeiro 21, 2015 É 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
biza 1 Denunciar post Postado Janeiro 28, 2015 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
ESerra 744 Denunciar post Postado Janeiro 28, 2015 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
biza 1 Denunciar post Postado Janeiro 28, 2015 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
ESerra 744 Denunciar post Postado Janeiro 28, 2015 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
biza 1 Denunciar post Postado Janeiro 28, 2015 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
ESerra 744 Denunciar post Postado Janeiro 28, 2015 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
biza 1 Denunciar post Postado Janeiro 28, 2015 gracias vou tentar aqui Compartilhar este post Link para o post Compartilhar em outros sites
biza 1 Denunciar post Postado Janeiro 28, 2015 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
ESerra 744 Denunciar post Postado Janeiro 28, 2015 Qual o SGBD que você está utilizando? Compartilhar este post Link para o post Compartilhar em outros sites
biza 1 Denunciar post Postado Janeiro 28, 2015 MySql Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Janeiro 28, 2015 Como esta é uma questão de modelagem/query, movendo de PHP para MySQL. Compartilhar este post Link para o post Compartilhar em outros sites
biza 1 Denunciar post Postado Janeiro 28, 2015 pois Eserra não estou conseguindo modelar já virei aqui o dia todo tentando nada . Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Janeiro 29, 2015 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
biza 1 Denunciar post Postado Janeiro 29, 2015 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
Motta 645 Denunciar post Postado Janeiro 29, 2015 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
Motta 645 Denunciar post Postado Janeiro 30, 2015 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
biza 1 Denunciar post Postado Janeiro 30, 2015 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