Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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.
>
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.
Order by uNoticiaDataIn desc, uNoticiaCliks asc
Nao resolve ?
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.
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.
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.
Se tem a hora gravada ?!
Caso sim tente buscar as últimas 24h e não do dia.[