Ir para conteúdo

Arquivado

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

Dian Carlos

Select ordenando por número de cliques + Data atual e menos 1 dia

Recommended Posts

Boa tarde galera, é o seguinte, eu tenho os campos NoticiaData e NoticiaCliques.

 

Preciso dar um SELECT onde seja listado somente as notícias da data atual, isso eu sei fazer, mas quando der meia noite as notícias vão sumir, pois será outro dia.

 

O que eu quero é que enquanto nenhuma notícia é inserida, fique exibindo as do dia anterior, ordenando por cliques e de acordo com que forem inserindo novas notícias elas vão aparecendo até que vai chegar uma hora que vai ter só notícias do dia atual.

 

A sintaxe atual é SELECT * FROM `unoticias` WHERE (DATE(`uNoticiaDataIn`) >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)) ORDER BY `uNoticiaCliks` DESC, `uNoticiaDataIn` DESC LIMIT 0,5

 

Isso não funciona do jeito que eu quero.

 

Desde já agradeço a ajuda de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se tem a hora gravada ?!

 

Caso sim tente buscar as últimas 24h e não do dia.[

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa query deve resolver teu problema:

SELECT
DATE_FORMAT(unoticias.uNoticiaDataIn, '%d/%m/%Y'),
unoticias.uNoticiaCliks,
DATEDIFF(unoticias.uNoticiaDataIn, CURDATE()) AS diferenca
FROM
unoticias
WHERE
DATEDIFF(unoticias.uNoticiaDataIn, CURDATE()) <= 0 OR DATEDIFF(unoticias.uNoticiaDataIn, CURDATE()) = -4
ORDER BY unoticias.uNoticiaCliks DESC, unoticias.uNoticiaDataIn DESC
LIMIT 0,5

 

Comparo a data da tabela com a data de hoje CURDATE() e vejo se ela é menor ou igual a 5 dias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se tem a hora gravada ?!

 

Caso sim tente buscar as últimas 24h e não do dia.

 

Motta, isso funcionou mais ou menos, o que eu preciso é isso mesmo, só quando uma notícia for colocada hoje ela também deve aparecer ali por cima de todos os resultados, mesmo se a contagem dela for menor do que 51 (exemplo atual). Se ela estivesse com 1 de cliques ela deveria aparecer em cima de todas, e de acordo com que as notícias fossem sendo cadastradas elas iriam aparecendo ali ordenando por cliques, como se fosse uma substituição.

 

Estou querendo isso por que o cliente quer que seja as mais lidas do dia.

 

Eu rodei o que você me passou (INTERVAL 24 HOUR), e retornou isso.

 

uNoticiaDataIn uNoticiaCliks

 

2013-09-18 12:33:27 | 51

2013-09-18 12:06:21 | 26

2013-09-18 16:35:25 | 16

2013-09-18 12:22:53 | 10

2013-09-18 12:36:39 | 6

 

Vou colocar assim por enquanto, hoje farei uma atualização grande nesse site e vamos ver se conseguimos resolver isso durante o dia.

Mas se tiver como fazer o que o cliente quer, por favor, me envie um método, qualquer coisa que me ajude a fazer isso.

 

Agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Order by uNoticiaDataIn desc, uNoticiaCliks asc

 

 

 

Nao resolve ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Order by uNoticiaDataIn desc, uNoticiaCliks asc Nao resolve ?

 

Então Motta, isso não está funcionando, parece que só ordena por 1 campo, e o outro não é levado em conta.

 

Eu estou rodando as consultas direto no phpMyAdmin e quando eu coloco ORDER BY `uNoticiaDataIn` DESC, `uNoticiaCliks` DESC ele ordena só pela data, e os cliques não são levados em conta. E quando eu faço ao contrário é só os cliques que são ordenados, a data não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dian Carlos , order by funciona.

 

parece que só ordena por 1 campo, e o outro não é levado em conta.

 

 

ORDER BY `uNoticiaDataIn` DESC, `uNoticiaCliks` DESC 

Ordenará primeiro por uNoticiaDataIn do maior para o menor (atente ao type do campo) e DEPOIS para valores de

uNoticiaDataIn iguais e dentro disto ordenará por uNoticiaCliks.

Para campos data verifique se não contém data e hora pois 23/09/2013 18:00:00 é maior que 23/09/2013 17:00:00, para que as datas fiquem "juntas" extraia apenas a data sem a hora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Haha, deu certo!!!

 

Converti o campo DATETIME para DATE e funcionou perfeitamente.

SELECT CONVERT(`uNoticiaDataIn`, DATE) AS `uNoticiaData` , `uNoticiaCliques` FROM `unoticias` WHERE (DATE(`uNoticiaDataIn`) >= DATE_SUB(CURDATE(), INTERVAL 24 HOUR)) ORDER BY  `uNoticiaData` DESC, `uNoticiaCliques` DESC LIMIT 0,7

Essa sintaxe retornou o seguinte resultado:

 

uNoticiaData | uNoticiaCliques
2013-09-24 | 4
2013-09-24 | 1
2013-09-23 | 7
2013-09-23 | 4
2013-09-23 | 3
2013-09-23 | 2
2013-09-23 | 2
Do jeito que eu queria, ordenando pela data e pelos cliques.
Motta, muito obrigado.

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.