Ir ao conteúdo
  • Cadastre-se

MySQL Ordernar data, não está colocando a mais nova no topo


Visitante
Ir à solução Resolvido por Leonardo0308,

Posts recomendados

Bom dia!

Tô aqui papando mosca com alguma coisa nessa query

SELECT * FROM log WHERE usuario='amauri filho' ORDER BY data ASC, hora DESC

o resultado é este, mas não é o que eu preciso

image.png.24a654c35dcc87fc8149a3cd7020b2aa.png

como pode ver as datas e horas estão ordenando corretamente de acordo com os critérios de ORDER BY para o mês e hora.

 

Mas preciso que isso seja diferente as datas e horários mais recentes sempre acima, por exemplo:

 

05/03/2020 - 08:37:07

04/03/2020 - 23:40:03

04/03/2020 - 22:15:36

...

25/02/2020 - 21:12:09

17/02/2020 - 19:41:33

17/02/2020 - 19:05:18

16/02/2020 - 22:07:13

16/02/2020 - 20:12:57

...

Como posso executar uma Query que organize os dados dessa forma como indiquei?

 

Grato.

Link para o comentário
Compartilhar em outros sites

Bom dia @fspjonny

 

Imagino que seu campo data e hora sejam do tipo string, para ordenar as datas corretamente você terá que transformar essa string no formato padrão de data, que é ano - mês - dia.

 

Para fazer isso você pode utilizar a função SUBSTRING().

 

ORDER BY SUBSTRING(data, 7, 4) + SUBSTRING(data, 4, 2) + SUBSTRING(data, 1, 2) ASC

Com isso a sua data vai ficar tipo 20200225, e assim o MySQL vai conseguir ordenar as datas corretamente.

 

 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Leonardo0308 disse:

Bom dia @fspjonny

 

Imagino que seu campo data e hora sejam do tipo string, para ordenar as datas corretamente você terá que transformar essa string no formato padrão de data, que é ano - mês - dia.

 

Para fazer isso você pode utilizar a função SUBSTRING().

 


ORDER BY SUBSTRING(data, 7, 4) + SUBSTRING(data, 4, 2) + SUBSTRING(data, 1, 2) ASC

Com isso a sua data vai ficar tipo 20200225, e assim o MySQL vai conseguir ordenar as datas corretamente.

 

 

Pior que estava assim antes, ai mudei o formato via comando SQL, mas mesmo antes não funcionava

veja agora

image.png.5e66b1deea7301749c62954f2f87cc90.png

 

Ainda está na mesma!

adicionado 4 minutos depois
1 minuto atrás, fspjonny disse:

Pior que estava assim antes, ai mudei o formato via comando SQL, mas mesmo antes não funcionava

veja agora

image.png.5e66b1deea7301749c62954f2f87cc90.png

 

Ainda está na mesma!

E sim o campo é formato string, acha que devo mudar para date? Já trabalhei assim com tipo string, porque é muito menos código na hora de armazenar e trazer a informação para exibir no formato correto dd/mm/yyyy, mas se para funcionar a consulta que preciso, for necessário fazer isso eu mudo tudo.

 

Link para o comentário
Compartilhar em outros sites

Estranho não estar funcionando, você poderia rodar a linha abaixo, só para me tirar uma duvida.

 

SELECT SUBSTRING(data, 7, 4) + SUBSTRING(data, 4, 2) + SUBSTRING(data, 1, 2) AS Teste, * FROM log WHERE usuario='amauri filho' ORDER BY SUBSTRING(data, 7, 4) + SUBSTRING(data, 4, 2) + SUBSTRING(data, 1, 2) ASC, hora DESC

 

40 minutos atrás, fspjonny disse:

acha que devo mudar para date?

 

Na minha opinião, acho melhor trabalhar com o tipo DATE, até por uma questão de desempenho no futuro, é melhor.

Link para o comentário
Compartilhar em outros sites

47 minutos atrás, Leonardo0308 disse:

Estranho não estar funcionando, você poderia rodar a linha abaixo, só para me tirar uma duvida.

 


SELECT SUBSTRING(data, 7, 4) + SUBSTRING(data, 4, 2) + SUBSTRING(data, 1, 2) AS Teste, * FROM log WHERE usuario='amauri filho' ORDER BY SUBSTRING(data, 7, 4) + SUBSTRING(data, 4, 2) + SUBSTRING(data, 1, 2) ASC, hora DESC

image.png.736020f7c64bde69e62bf800d1dee6ed.png

 

Citação

Na minha opinião, acho melhor trabalhar com o tipo DATE, até por uma questão de desempenho no futuro, é melhor.

 

Isso aí dá é pano para manga...kkk discutir a performance...mas eu sei bem o que acontece dos dois lados da moeda, todos dois tem as vantagens e desvantagens, na data como string, tenho inúmeras maneiras de tratar, fatiar, listar, etc...sem precisar converter o tipo, como DATE, Não...tem um limite de uso e comandos e precisará obrigatoriamente de conversão para outras formatações ou uso parcial dos dados na forma numérica ou como caractere......mas o que falo em relação a isso, é que essa escolha vai depender muito mais da finalidade e forma como o dado em sí será usado.

Link para o comentário
Compartilhar em outros sites

Você está usando o mariaDB? achei que era MySQL. Será que é o tipo de concatenação que está dando problema?

 

Bem, tenta assim por favor.

 

SELECT CONCAT(SUBSTRING(data, 7, 4), SUBSTRING(data, 4, 2), SUBSTRING(data, 1, 2)) AS Teste, * FROM log WHERE usuario='amauri filho'

 

1 hora atrás, fspjonny disse:

essa escolha vai depender muito mais da finalidade e forma como o dado em sí será usado.

 

Concordo, mas como você falou que gostaria de ordenar os dados pela data, é bem mais pratico colocar o tipo de dado como DATE, ai você não precisar dar toda essa volta para ordenar.

Link para o comentário
Compartilhar em outros sites

7 minutos atrás, Leonardo0308 disse:

Concordo, mas como você falou que gostaria de ordenar os dados pela data, é bem mais pratico colocar o tipo de dado como DATE, ai você não precisar dar toda essa volta para ordenar.

Sim verdade, em Python eu teria resolvido esse lance com os pés nas costas

 

Mas eu não queria mudar isso, porque tem dois motivos:

1) É um sistema todo legado, que a frontend daqui entende bem a "linhaça" dela...eu tô aqui cobrindo a licença maternidade dela e dando essa "força", e quando ela voltar(e se voltar), vai ser resolvido por ela, por isso não queria mudar nada, mas a cliente dela quer alteração na visualização dos logs de acesso, e por isso tô fazendo esses remendos....

 

2)Caso ela não volte, já é mais um apoio que eu ganho em refatorar isso tudo para Python/Django, a cliente fica com o sistema antigo enquanto um novo e mais organizado sai do forno.

 

Quanto a tabela vamos lá, o resultado do que você me pediu:

image.png.3b749a04282fb0130bc490b7c8607694.png

Eu acredito que seja sim MySQL, porque não me recordo de MariaDb usar InnoDB, apesar do InnoDB dar suporte a Maria...

tirei esse print pelo SQL Browser daqui, não tenho maior acesso a informação.

image.png.59c8181e4cb0bc5ca0a11277a7f0f794.png

Me corrija se eu estou errado....

 

Mas fica tranquilo, porque eu pedi uma uma cópia dessa tabela e mudar para tipo para data e fazer um teste isolado aqui, e vou ver se consigo melhorar a filtragem desse log.

 

Obrigado! @Leonardo0308

 

Link para o comentário
Compartilhar em outros sites

  • Solução
6 minutos atrás, fspjonny disse:

Eu acredito que seja sim MySQL, porque não me recordo de MariaDb usar InnoDB, apesar do InnoDB dar suporte a Maria...

 

Pelo que eu tava vendo o MariaDB usa o InnoDB, mas com uma versão diferente do MySQL. (FONTE).

 

E também achei que pudesse ser, pelo que está escrito no erro.

 

 

7 minutos atrás, fspjonny disse:

Mas fica tranquilo, porque eu pedi uma uma cópia dessa tabela e mudar para tipo para data e fazer um teste isolado aqui, e vou ver se consigo melhorar a filtragem desse log.

 

Obrigado! @Leonardo0308

 

Desculpe, não conseguir ajudar, mas qual quer estamos ai o/

Link para o comentário
Compartilhar em outros sites

5 minutos atrás, Leonardo0308 disse:

 

Pelo que eu tava vendo o MariaDB usa o InnoDB, mas com uma versão diferente do MySQL. (FONTE).

Citação

 e desde a versão 5.6 olha frase: MariaDB e Percona Server usam uma bifurcação do InnoDB chamada XtraDB por padrão. XtraDB é mantido pela Percona.

 

 

E também achei que pudesse ser, pelo que está escrito no erro.

Citação

Vi isso Tb,mas perguntei ao TI ele disse My SQL......😒

 

 

Citação

Desculpe, não conseguir ajudar, mas qual quer estamos ai o/

Relaxa!, ajudou muito eu não tenho mais essa malícia com SQL, por causa do Django e outros frameworks que interagem por você no SQL, acaba-se por esquecer um pouco da sintaxe das coisas pela falta de necessidade de usar de linhas de comando.

 

Te agradeço muito ! Valeu!!! @Leonardo0308

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...