Ir para conteúdo

POWERED BY:

Arquivado

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

lightfox

ORDER BY data ASC ? (dia/mes/ano)

Recommended Posts

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

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

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/2013
Dia 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

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

@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

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

×

Informação importante

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