hcfpastel 1 Denunciar post Postado Outubro 5, 2009 Boa tarde, pessoal.. Estou com um problema aqui no trampo com um campo datetime e não estou conseguindo resolver.. já pesquisei dimais, então vou direto ao ponto.. Bom.. preciso pesquisar somente a data em um campo do tipo datetime... eu até consigo listar os registros e gerar a tabela normalmente.. só que o problema é que a consulta retorna os valores, porém o $total_linhas = mysql_num_rows() do php retorna 0 pra variável $total_linhas... Já tentei das seguintes formas: SELECT *, count(*) as total from visualizadores where cast(data_cadastro as date) = '2009-07-24'; //a variável total recebe o total correto, porém só lista o último campo,.. e o mysql_num_rows() retorna 0 SELECT * from visualizadores where cast(data_cadastro as date) = '2009-07-24'; //retorna todos os campos corretamente, porém o mysql_num_rows() retorna 0... SELECT * FROM visualizadores where MONTH(data_cadastro) = 07; //retorna todos os campos corretamente, porém o mysql_num_rows() retorna vazio com DATE_FORMAT tbm não dá... pq ele serve pra listar formatando a data que existe.... e o que preciso é o contrário.... Resumindo.. tenho uma data: 24/04/2009 .... e quero pesquisar esta data no banco, que está assim: 24/04/2009 13:20:32 Se alguém souber como, dá um help ae pq tá custoso isso... Odeio ficar criando tópico pq quase que 100% das vezes acho na net o que procuro.. mas dessa vez tá difícil.... sempre acho explicação só em 'como formatar a saída dos dados'... mas procurar o dado já formatado táh osso... talvez seja erro na lógica, sei láh... Correção do título: Como pesquisar em campo DATETIME do mysql tendo apenas a DATA Compartilhar este post Link para o post Compartilhar em outros sites
Dee 0 Denunciar post Postado Outubro 5, 2009 SELECT COUNT(*) FROM VISUALIZADORES WHERE CONVERT(VARCHAR,DATA,103) = '05/10/2009' ou SELECT COUNT(*) FROM VISUALIZADORES WHERE CAST(DATA_CADASTRO AS VARCHAR) = '24/07/2009'; Compartilhar este post Link para o post Compartilhar em outros sites
hcfpastel 1 Denunciar post Postado Outubro 5, 2009 Dee.... valeu pela atenção, mas ainda não deu certo, cara... select count(*) as total from visualizadores where cast(data_cadastro as date) = '24/07/2009';Tentei assim e retornou total = 0; select * from visualizadores where cast(data_cadastro as date) = '24/07/2009';Tentei assim e retornou "Truncated incorrect date valur: '24/07/2009'(E existe um registro com esses dados) SELECT COUNT(*) FROM visualizadores WHERE CAST(data_cadastro AS varchar) = '24/07/2009';Tentei assim e retornou erro de sintaxe.. Ahh... essa budega vai me dexáh loco ainda, véi.. aneimmmm Compartilhar este post Link para o post Compartilhar em outros sites
Dee 0 Denunciar post Postado Outubro 5, 2009 E esse daqui que eu postei ??? Tentou esse ? SELECT COUNT(*) FROM VISUALIZADORES WHERE CONVERT(VARCHAR, DATA, 103) = '24/07/2009' Compartilhar este post Link para o post Compartilhar em outros sites
lucasmartins 6 Denunciar post Postado Outubro 5, 2009 Cara, você tem certeza que o tipo do campo desta data é DATETIME ?????? E que o formato está 24/04/2009 13:20:32 ????? Verifique como está o formato no seu banco... deve estar assim: 2009-04-24 13:20:32 Tente fazer a pesquisa assim: SELECT *, count(*) AS total FROM visualizadores WHERE data_cadastro = STR_TO_DATE('2009-07-24', '%Y-%m-%d'); ou assim: SELECT *, count(*) AS total FROM visualizadores WHERE DATE_FORMAT(data_cadastro, '%Y-%m-%d') = STR_TO_DATE('2009-07-24', '%Y-%m-%d'); Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Outubro 5, 2009 A função strtotime() pode lhe ajudar. Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Outubro 6, 2009 Estou com um problema aqui no trampo com um campo datetime e não estou conseguindo resolver.. Bom.. preciso pesquisar somente a data em um campo do tipo datetime... Amigão, é simples e você pode utilizar as funções do próprio mysql: Seus dados estão assim: mysql> select * from `datas`; +----+---------------------+ | id | data | +----+---------------------+ | 1 | 2009-10-06 06:36:27 | | 2 | 2009-11-06 15:00:27 | | 3 | 2009-12-06 19:00:38 | +----+---------------------+ 3 rows in set (0.00 sec) Recuperando apenas a parte da data: mysql> select date(data) from `datas`; +------------+ | date(data) | +------------+ | 2009-10-06 | | 2009-11-06 | | 2009-12-06 | +------------+ 3 rows in set (0.00 sec) O problema de se utilizar a função date() do MySQL é que a data retornada não é no padrão brasileiro e por isso você não conseguirá fazer a comparação com essa string, então a solução é converter essa data para o padrão brasileiro: mysql> select date_format(data,'%d/%m/%Y') from `datas`; +------------------------------+ | date_format(data,'%d/%m/%Y') | +------------------------------+ | 06/10/2009 | | 06/11/2009 | | 06/12/2009 | +------------------------------+ 3 rows in set (0.00 sec) Agora que já temos a data no nosso padrão, basta fazer a consulta: mysql> select * from `datas` where date_format(data,'%d/%m/%Y')='06/11/2009'; +----+---------------------+ | id | data | +----+---------------------+ | 2 | 2009-11-06 15:00:27 | +----+---------------------+ 1 row in set (0.00 sec) ;) Compartilhar este post Link para o post Compartilhar em outros sites
hcfpastel 1 Denunciar post Postado Outubro 6, 2009 Orra, gente... que m*****, viu... esse negócio aqui tá me dando nos nervos, véi... tipo... a solução proposta pelo joão batista listou os registros certinho.. select * from visualizadores where date_format(data_cadastro, '%d/%m/%Y') = '24/07/2009';o problema é que o total tá retornando ZERO... e se eu coloco assim: select *, count(*) as total from visualizadores where date_format(data_cadastro, '%d/%m/%Y') = '24/07/2009'; Ela só lista o último registro, porém a variável total recebe o valor correto, que no caso é 4.. lucasmartins.com.br.... o campo é do tipo datetime sim, clara... eu estou desenvolvendo o sistema completamente.. Mas bem... vou refazer meu script aqui totalmente,... e ver se o que estou errando não é na lógica na hora de atribuir á variável TOTAL no php a quantidade de linhas que a consulta tá retornando.. esse negócio de fazer consulta po data realmente dá um trabalho do caramba.... Por nome, email, vem tudo redondinho.. mai a bendita data de cadastro tá me danu dor de cabeça, véi.. virgi maria... Obrigado a todos que estão tentando ajudar ae... Em breve aviso aqui o q resultou... Compartilhar este post Link para o post Compartilhar em outros sites
Dee 0 Denunciar post Postado Outubro 6, 2009 SELECT COUNT(*) FROM VISUALIZADORES WHERE CONVERT(VARCHAR, DATA_CADASTRO, 103) = '24/07/2009' Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 6, 2009 Ela só lista o último registro, porém a variável total recebe o valor correto, que no caso é 4.. Com base nesta sua afirmação, creio que o seu problema não esteja na consulta. Para testar, execute esta consulta no PhpMyAdmin ou outro programa que você tenha para administrar o banco de dados. Caso aqui o resultado esteja aparecendo corretamente, poste a forma que você está utilizando para exibir os dados. Aparentemente o problema está ali. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Outubro 6, 2009 tipo... a solução proposta pelo joão batista listou os registros certinho.. o problema é que o total tá retornando ZERO... Se os dados estão sendo listados corretamente então basta utilizar mysql_num_rows() para recuperar o total de registros, uma vez que a função count(*) do MySQL é um agrupador: if ( $res = mysql_query( 'select * from visualizadores where date_format(data_cadastro, "%d/%m/%Y") = "24/07/2009"' ) ){ $total = mysql_num_rows( $res ); while ( $row = mysql_fetch_array( $res , MYSQL_ASSOC ) ) var_dump( $total , $row ); } Compartilhar este post Link para o post Compartilhar em outros sites
hcfpastel 1 Denunciar post Postado Outubro 6, 2009 Mais uma vez eu me firmo no pensamento de que: "Nem sempre o que dá certo, está certo realmente"... Era o posicionamento de uma variável que estava errado.. tipo.... eu tenho basicamente dois tipos de consulta... a que filtra, e a que lista tudo... Só que tipo... a que filtra, pra listar o total, sempre tinha o mesmo valor.... $sql_filtrar = "SELECT * FROM visualizadores where $local LIKE'$detalhe%'";E dava certo com nome, email, cidade, estado, etc... pq nesses campos sempre era dessa forma que a consulta era realizada. já na data... eu teria que atribuir á variável $sql_filtrar, a devida consulta com suas modificações.... tipo: if ($local == "data_cadastro"){ $dia = substr($detalhe,0,2); $mes = substr($detalhe,3,2); $ano = substr($detalhe,6,4); $consulta_filtrar = "select * from visualizadores where date_format(data_cadastro, '%d/%m/%Y') = '" . $detalhe . "'"; $sql_filtrar = $consulta_filtrar; } E era nisso que tava dando pau essa budega aqui.. dposakdposakpdoak Mas nada como compilar o código mentalmente linha a linha, pra que esses erros de lógica idioootas sejam solucionados... Obrigado a todos mais uma vez.. quando tiverem um tempo, acessem ae... www.silvanews.com.br ainda tem muiiiiiito a fazer no sistema... e essa minha dúvida aqui, por exemplo, é pro gestor de conteúdo do site.. Futuramente, minha empresa quer que eu crie tipo um 'orkut da empresa'.... só pra quem já fez os treinamentos que ela oferece e talz.. e eu, sinceramente, ainda tô recolhendo as idéias de tudo que querem que tenha, pra depois documentar o sistema e colocar a mão na massa. Bom dia a todos... e até mais... Opss.. só um comentário sobre o código que postei acima... Eu tinha colocado esse substr ae pq antes, na minha consulta, eu concatenava dia, mes e ano, usando os metodos DAY, MONTH e YEAR.... agora já posso tirar isso ae que fica mai fácil... hehe.. Só quando é pra procurar por Dia ou mes ou ano, separadamente, é que terei de continuar usando esses métodos.. \o// Compartilhar este post Link para o post Compartilhar em outros sites
PaladinoMedieval 0 Denunciar post Postado Outubro 6, 2009 Outra coisa ... você tem permissoes para mudar o tipo da variavel ? Em caso afirmativo a mudança nao vai interferir no projeto ? Uma vez eu mudei o tipo de variavel Timestamp para Date e o meu problema que era parecido com o seu foi resolvido.. Compartilhar este post Link para o post Compartilhar em outros sites
hcfpastel 1 Denunciar post Postado Outubro 6, 2009 Outra coisa ... você tem permissoes para mudar o tipo da variavel ? Em caso afirmativo a mudança nao vai interferir no projeto ? Uma vez eu mudei o tipo de variavel Timestamp para Date e o meu problema que era parecido com o seu foi resolvido.. PaladinoMedieval Como dito anteriormente, o problema estava mais na lógica do que na sql... mas só respondendo sua pergunta, tenho acesso total e permissão 100% pra modificar o que eu quizer no banco ou sistema em si... só que o campo estando como datetima pra mim está melhor, pois tenho mais controle de acesso dos usuários no sistema... Como por exemplo... listar a última vez que o usuário acessou o sistema... (essa claro é listada atravez da consulta em outro campo... mas achei melhor padronizar tudo que é tipo de campo DATA para datetime).. (Y) Compartilhar este post Link para o post Compartilhar em outros sites