Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Amigos, estou usando essa SQL para buscar textos mais lido da semana, mas não retorna resultado algum. Será que alguém poderia dar uma luz? É uma emergência, para um trabalho. Obrigado.
<?php
// SQL que condiciona selecao os posts do mesmo, mesmo mês e mesmo dia.
$sql = "SELECT SQL_CACHE * FROM artigos
WHERE (YEAR(data) = YEAR(now()))
and (MONTH(data) = MONTH(now()))
and (WEEK(data) = WEEK(NOW()))
ORDER BY visitas DESC LIMIT 10";
$query = mysql_query($sql);
while($dados = mysql_fetch_array($query, MYSQL_ASSOC)) {
$dados['id'];
$dados['autor'];
$dados['data'];
$dados['titulo'];
$dados['visitas'];
?>
<?php echo $dados['autor']; ?> - <?php echo $dados['titulo']; ?> - <?php echo $dados['visitas']; ?>
<?php } />>
posta a estrutura da tabela pra podermos te ajudar, brother...
Tabela ARTIGOS
CREATE TABLE IF NOT EXISTS `artigos` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`categoria` tinyint(4) NOT NULL DEFAULT '0',
`titulo` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
`artigo` longtext COLLATE latin1_general_ci,
`colunista` int(4) DEFAULT NULL,
`data` datetime DEFAULT NULL,
`publicar` tinyint(4) NOT NULL DEFAULT '0',
`audio` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '0',
`video` varchar(255) COLLATE latin1_general_ci DEFAULT '0',
`thumb` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
`visitas` int(11) NOT NULL DEFAULT '0',
`imagem` varchar(255) COLLATE latin1_general_ci NOT NULL DEFAULT '',
`foto` varchar(255) COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `colunista` (`colunista`),
FULLTEXT KEY `titulo` (`titulo`),
FULLTEXT KEY `titulo, artigo` (`titulo`,`artigo`)
) ENGINE=MyISAMDe acordo com [esse stack](http://stackoverflow.com/questions/5293189/select-records-from-today-this-week-this-month-php-mysql) seria:
SELECT * FROM artigos WHERE data > DATE_SUB(NOW(), INTERVAL 1 WEEK) ORDER BY visitas DESC LIMIT 10
Há um alerta na resposta dada para a coluna ser uma date column do MySQL. Não sei isso siginifica que a coluna deva ser do tipo DATE, DATETIME ou ou TIMESTAMP.
Experimente com as aspas corretamente:
SELECT
SQL_CACHE *
FROM artigos
WHERE
YEAR( data ) = YEAR( NOW() )
AND MONTH( data ) = MONTH( NOW() )
AND WEEK( data ) = WEEK( NOW() )
ORDER BYvisitas DESC
LIMIT 10
E tente rodar no phpMyAdmin para ver o resultado também.
Mas eu acho que também prefiro usar o Interval, como o Bruno indicou. Mas ainda assim, não esqueça das aspas (que no caso são crases, como no exemplo acima).
[]'s!
>
Experimente com as aspas corretamente:
SELECT
SQL_CACHE *
FROM artigos
WHERE
YEAR( data ) = YEAR( NOW() )
AND MONTH( data ) = MONTH( NOW() )
AND WEEK( data ) = WEEK( NOW() )
ORDER BYvisitas DESC
LIMIT 10
E tente rodar no phpMyAdmin para ver o resultado também.
Mas eu acho que também prefiro usar o Interval, como o Bruno indicou. Mas ainda assim, não esqueça das aspas (que no caso são crases, como no exemplo acima).
[]'s!
Bruno e Matheus,Deu tudo certo.
O problema era mesmo a ausência das aspas (crases).
Valeu!
posta a estrutura da tabela pra podermos te ajudar, brother...