lightfox 7 Denunciar post Postado Janeiro 25, 2013 Olá, pessoal. Estou com uma dor de cabeça para desenvolver uma parte de um site aqui. Se trata de uma agenda de shows. Primeiro eu gostaria de saber como eu ordeno um while() pela data, contando dia, mes e ano em ASC. Por exemplo, eu gostaria que ficasse assim: ID dia mes ano --------------------------------------- 3 22 01 2013 1 23 01 2013 2 03 02 2013 4 09 03 2013 No caso acima, está ordenado por dia e mes, ja que o ano é o mesmo, e o ID nao quero nem me preocupar. Eu dei uma pesquisada encontrei uns ORDER BY mas sem sucesso. Gostaria de saber um maneira prática de fazer isso. Estou utilizando os campos DIA, MES e ANO separadamente em VARCHAR. Preciso usar 1 unico campo para a data em formato DATE no mysql? Se for o caso, eu poderia trabalhar no php da seguinte forma: $dia = $_POST['dia'];$mes = $_POST['mes'];$ano = $_POST['ano'];$data = "$dia-$mes-$ano"; ? Aguardo respostas! Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Janeiro 25, 2013 use um campo date, se usar varchar para uma data vai ter problema na hora de ordenar. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Janeiro 25, 2013 Sim, você necessita trabalhar com date, datetime ou timestamp para formatos de data (não me lembro se existem outros, mas são os formatos principais). Quando eu digo que necessita, é para usufruir das validações que o SGBD faz em cima de formatos de data, como data inválida por exemplo. Já no PHP, utilize a biblioteca DateTime. Vou lhe dar um exemplo. Digamos que a minha DDL está da seguinte maneira: CREATE TABLE tabela ( id INT(10) PRIMARY KEY, data DATE NOT NULL ); Realizo a query: SELECT * FROM tabela ORDER BY data ASC E no PHP, trabalho utlizando a biblioteca DateTime: $data = new DateTime($query['data']); Para um exemplo prático, veja esse código: $data = new DateTime('2013-01-25');//Suporta diversos formatos de data echo $data->format('d/m/Y').'<br />'; printf( 'Dia %d do mês %d do ano %d;', $data->format('j'), $data->format('n'), $data->format('Y') ); Saída: 25/01/2013Dia 25 do mês 1 do ano 2013; Se quiser brincar com o código, poderá visualizá-lo aqui: http://codepad.viper-7.com/7DHVSF Compartilhar este post Link para o post Compartilhar em outros sites
wolfphw 60 Denunciar post Postado Janeiro 25, 2013 Estou utilizando os campos DIA, MES e ANO separadamente em VARCHAR. Preciso usar 1 unico campo para a data em formato DATE no mysql? Se for o caso, eu poderia trabalhar no php da seguinte forma: Sim o mais aconselhado seria vc utilizar um único campo para data, e no formato de aaaa-mm-dd, esse formato vai ajudar muito vc a fazer busca no seu banco... Agora caso vc queria ou precise continuar com a data no formato de 3 colunas como vc estava fazendo, vc faz a busca colocando as 3 colunas no order by... exemplo: $sql = "SELECT * FROM tabela ORDER BY ano DESC, mes DESC, dia DESC"; Esse formato ele vai primeiro ordernar o ano depois o mês e por ultimo o dia decrescentemente... Compartilhar este post Link para o post Compartilhar em outros sites
lightfox 7 Denunciar post Postado Janeiro 25, 2013 @wolfphw Isso resolveu perfeitamente meu problema, muito obrigado. Eu não sabia que era possível utilizar ORDER BY dessa forma. @Gabriel Heming Esclareceu muita coisa. Estou estudando isso agora mesmo, tentarei fazer dessa forma sim, pois acredito ser a mais correta, apesar do wolfphw ja ter postado a solução atual. Obrigado a todos! Resolvido Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Janeiro 25, 2013 Sim, isso pode resolver o seu problema. Pela ordenação. Entretanto, ainda é o sugerido o uso de formato date. Futuramente, pode resolver outros problemas. Compartilhar este post Link para o post Compartilhar em outros sites