halfar 5 Denunciar post Postado Setembro 10, 2014 bem, tem algo esquisito acontecendo.. tenho uma instrucao sql que relaciona duas tabelas, e utilizo o between para pegar intervalo de datas.... select novidades_tecnologia.data, novidades_tecnologia.pagina, novidades_tecnologia.id_materia, novidades_tecnologia.cliques, novidades_tecnologia.diretorio, novidades_tecnologia.titulo, relat_tecnologia.data_visita, sum(relat_tecnologia.visitas_diarias) as total_visitas, relat_tecnologia.pagina from(novidades_tecnologia inner join relat_tecnologia on relat_tecnologia.pagina = novidades_tecnologia.pagina) where relat_tecnologia.data_visita between '2014-08-11' and '2014-09-10' group by relat_tecnologia.pagina ocorre que a instrução acima não traz resultados referente ao mes 09...traz somente referente ao mes 08, exibe vários registros do mes de agosto, de fato em agosto existem vários registros....Mas referente ao mes 09, embora existam registros, não lista nenhum Para piorar, se eu trocar o group by por order by, aí ele traz somente um registro do mes de agosto, deveria trazer mais registros do que a instrução quando utilizo group by, não é verdade? Já testei este codigo diretamente no phpMyAdmin, e é a mesma coisa.... será que este between realmente é confiável? estou fazendo varios testes, não dá para explicar tudo aqui, mas os resultados obtidos estão inconsistentes... Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Setembro 10, 2014 Sim, o BETWEEN é confiável. O INNER JOIN especifica que deve ser retornado apenas se houver o relacionamento, caso contrário, não exibirá o resultado. Uma dica, use ALIAS, diminui o tamanho da SQL, e a identação facilita no entendimento: SELECT n. DATA, n.pagina, n.id_materia, n.cliques, n.diretorio, n.titulo, r.data_visita, sum( r.visitas_diarias )AS total_visitas, r.pagina FROM novidades_tecnologia AS n Inner Join relat_tecnologia AS r ON r.pagina= n.pagina WHERE r.data_visita BETWEEN '2014-08-11' AND '2014-09-10' GROUP BY r.pagina Compartilhar este post Link para o post Compartilhar em outros sites
halfar 5 Denunciar post Postado Setembro 14, 2014 sera que o erro nao está no entendimento de relacionamento inner join? estou passando no final deste post o link onde poderá ver este relatorio de exibição de paginas, para que possam ter uma melhor compreensão, deixei inclusive a sql visivel e o numero de registros encontrados juntamente proximo a sql... bem, para explicar o que está acontencendo, vamos a um exemplo: na tabela novidades_tecnologia contem o cadastro de uma única determinada materia, e em cujo campo pagina contem o valor pagina_teste.php na outra tabela relacionada chamada relat_tecnologia também contem um campo chamado pagina, mas contem vários registros com o campo pagina = pagina_teste.php, de formas que, se esta tabela possuir 10 registros deveriam ser exibidos 10 registros, a não ser que seja especificado o group by, o que não é o caso, pois deixei por enquanto como order by para ver se está funcionando corretamente. Então não deveria listar todos os 10 registros? Vamos a um exemplo real: Na tabela relat_tecnologia existem 3 registros com datas de 11.08.2014 (vide imagem abaixo) e para cada uma das paginas listas na imagem acima, existe um registro correspondente na outra tabela. No entanto, está sempre listando apenas 1 registro, ou seja apenas o primeiro registro transceder_novo_cartao_memoria.php onde poderá estar o erro? ah...esqueci o link...segue agora: http://www.negocios.online.nom.br/novidades_tecnologicas/relatorios/quantidade_visualizacoes.php Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 14, 2014 Qual o tipo dos campos , são DATE ? Compartilhar este post Link para o post Compartilhar em outros sites
halfar 5 Denunciar post Postado Setembro 14, 2014 isto mesmo, o campo é do tipo date, e é somente data mesmo, não é aquele campo que tem data e hora Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 14, 2014 Uma dica é retirar o filtro por data e ver o que query trás, como já foi dito parece ser um caso de um join "faltante" , talvez um OUTER JOIN resolva. Compartilhar este post Link para o post Compartilhar em outros sites
halfar 5 Denunciar post Postado Setembro 16, 2014 é, retirei o criterio da data, mas continua igual... o que estou estranhando é que este código estava funcionando.... fico pensando se não seria o provedor... será que poderiam ter feito alguma configuração errada no provedor??? Fico com o pé meio atrás, porque já tive um problema parecido com outro provedor, que estava trabalhando com duas bases de dados, tipo algo mais ou menos assim: quando inseria um registro, ia para uma base de dados, quando ia realizar consulta, puxavam de uma outra cópia de base de dados,porém desatualizada... Compartilhar este post Link para o post Compartilhar em outros sites
halfar 5 Denunciar post Postado Setembro 18, 2014 achei uma luz neste caso... tive que retirar a expressão sum(relat_tecnologia.visitas_diarias) as total_visitas da expressão sql. a expressão completa estava assim: select novidades_tecnologia.data, novidades_tecnologia.pagina, novidades_tecnologia.id_materia, novidades_tecnologia.cliques, novidades_tecnologia.diretorio, novidades_tecnologia.titulo, relat_tecnologia.data_visita, sum(relat_tecnologia.visitas_diarias) as total_visitas, relat_tecnologia.pagina from(novidades_tecnologia inner join relat_tecnologia on relat_tecnologia.pagina = novidades_tecnologia.pagina) where relat_tecnologia.data_visita between '2014-08-11' and '2014-09-10' group by relat_tecnologia.pagina se eu mantiver o sum(relat_tecnologia.visitas_diarias) as total_visitas sempre traz como resultado apenas a primeira linha encontrada e ignora as demais... alguem saberia explicar o porque? Mas mesmo assim estou estranhando, pois o codigo funcionava antes... será que o provedor pode ter alguma configuração que prejudique isto? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 18, 2014 Já tentou com totodo agrupamento ? SELECT novidades_tecnologia.DATA, novidades_tecnologia.pagina, novidades_tecnologia.id_materia, novidades_tecnologia.cliques, novidades_tecnologia.diretorio, novidades_tecnologia.titulo, relat_tecnologia.data_visita, sum(relat_tecnologia.visitas_diarias) AS total_visitas, relat_tecnologia.pagina from (novidades_tecnologia INNER JOIN relat_tecnologia ON relat_tecnologia.pagina = novidades_tecnologia.pagina) WHERE relat_tecnologia.data_visita BETWEEN '2014-08-11' AND '2014-09-10' group by novidades_tecnologia.DATA, novidades_tecnologia.pagina, novidades_tecnologia.id_materia, novidades_tecnologia.cliques, novidades_tecnologia.diretorio, novidades_tecnologia.titulo, relat_tecnologia.data_visita, relat_tecnologia.pagina Compartilhar este post Link para o post Compartilhar em outros sites
halfar 5 Denunciar post Postado Setembro 19, 2014 é funcionou....mas nao precisei fazer o grupo todo, bastou apenas o grupo da data e da pagina.... aliás nem consigo imaginar um grupo tão grande assim...nem sei como isso funcionaria... mas valeu...agora parece que tá tudo certo. no entanto, fiquei na curiosidade porque tive que especificar o group by, acho que deveria ter funcionado tambem com order by..., mas enfim....tá funcionando agora...é o que importa de momento... Compartilhar este post Link para o post Compartilhar em outros sites