Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá gente! Tenho uma tabela MySql com o registro dos downloads feitos por cada postagem (valores totais, não semanais). Preciso de um contador de downloads semanal, para mim saber quantos downloads de cada postagem foram feitos em cada semana. Tenho conhecimento básico de PHP. Como posso fazer? Obrigado.
>
A primeira coisa a se fazer é efetuar uma pesquisa junto a Google/Bing, tentar elaborar a primeiras linhas do algorítimo, pois o que pode ser simples para você, pode ser muito amplo e complexo para a comunidade, ou vice versa.
Se tiver alguma dúvida poste o script após elaborar as primeiras linhas do seu algorítimo. E se mesmo assim, ainda não compreendeu como funciona um fórum, de uma lida no post abaixo:
http://forum.imasters.com.br/topic/375800-orientaes-para-uma-boa-participao/
:thumbsup:
O contador eu sei fazer, só quero saber como faço para cada semana pegar as informações.
http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/
Como vou utilizar este código? Não entendi muito bem. No código que eu fiz ele faz um update no MySql a cada download do arquivo que o usuário faz, somando + um no valor.
SELECT FROM_DAYS(TO_DAYS(sales_time) -MOD(TO_DAYS(sales_time) -1, 7)) AS week_beginning,
SUM(gross) AS total,
COUNT(*) AS transactions
FROM sales
GROUP BY FROM_DAYS(TO_DAYS(sales_time) -MOD(TO_DAYS(sales_time) -1, 7))
ORDER BY FROM_DAYS(TO_DAYS(sales_time) -MOD(TO_DAYS(sales_time) -1, 7))Tchê, vamos pensar um pouco, se a sua modelagem atual apenas adiciona +1 a cada download, como você espera separar isto por dias/semanas/meses/whatever? Não dá né... então, primeiro você terá que montar uma tabela para controlar os downloads, pode ser por dia mesmo, a partir disto você consegue montar o relatório.
Então se já sabe, fica fácil né, mas não com essa modelagem de clique=clique+1
O correto é como mencionado no post #6, ir armazenando os cliques em outra tabela e data
Depois só somar
SELECT SUM(campo) as total FROM tabela WHERE yearweek(datetime) = yearweek(curdate());
Pensei em usar a função date() do PHP para poder saber o dia da semana, se o dia fosse sábado o contador zeraria, mas não daria muito certo. Como seria essa table?
Postemos quase ao mesmo tempo, de uma olhada no post #7
Postemos quase ao mesmo tempo, de uma olhada no post #7
Agora vi, estava fazendo uns testes. Então tenho que criar uma tabela pra gravar a id do post e a data do clique, vai criar um registro a cada clique, isso? A data completa ou só dias e/ou semana? Obrigado.
Data do tipo Datetime. Exemplo
2015-05-11 22:06:41
CREATE TABLE NewTable (id int(11) NOT NULL AUTO_INCREMENT ,id_down int(11) NULL DEFAULT NULL ,data datetime NULL DEFAULT NULL ,
PRIMARY KEY (id)
);
No insert
INSERT INTO NewTable (id_down, data) VALUES ('{$id_down}',NOW());
Olá, fiz o que me disse, ficou assim:
/applications/core/interface/imageproxy/imageproxy.php?img=http://snap.ashampoo.com/uploads/2015-05-12/2EICWO4n.png&key=b982676db4a490978cf6bead71d56c2015da7c0871cf5c2b4307b3ce2c03e286" alt="2EICWO4n.png" />
Tentei fazer dessa forma para testar, porém não funcionou:
require("conexao.php");
$conn = new Conexao();
$sql = mysql_query("SELECT SUM(data) as total FROM downloads WHERE yearweek('datetime') = yearweek(curdate())");
while($ln = mysql_fetch_array($sql)){
$id = $ln['id_post'];
echo $id . "<br/>";
}yearweek('datetime')
Coloque o nome do campo, era só um exemplo
SELECT SUM(data) as total FROM downloads WHERE yearweek(data) = yearweek(curdate())
/applications/core/interface/imageproxy/imageproxy.php?img=http://snap.ashampoo.com/uploads/2015-05-12/2EICWO4n.png&key=b982676db4a490978cf6bead71d56c2015da7c0871cf5c2b4307b3ce2c03e286" alt="2EICWO4n.png" />
falta mais um campo aí.. coloca downloads int e vai contando os downloads dessa tal data..
ops.. vi que o id_post é do download ou do arquivo ?
Williams Duarte, fiz isso, porém está aparecendo um erro, que diz que "id_post", de "$ln['id_post'];" está indefinido.
AnimesMix, o id_post é a id da postagem, através da id vou pegar as outras informações. Neste código cada clique gera um registro no MySql. Agora, pensando bem, isso vai encher minha tabela, criando milhares de registros.
eu acho melhor voce usar PDO no seu sistema..
e pelo que estou vendo aí hmmm acho que está meio confuso essa contagem o_O"
eu tenho umas bases de fazer somas de posts e downloads no meu site mas ainda não fiz por dia
ou semana.. nesse seu exemplo aí como voce quer eu faria de outra maneira..
no mesmo campo do arquivo download eu colocaria a data lá.. é mais viavio.
Adicionei a contagem a tabela, ficou assim:
/applications/core/interface/imageproxy/imageproxy.php?img=http://snap.ashampoo.com/uploads/2015-05-12/amovZHXE.png&key=9a7dcda4385064073b26e87a57f77b504c601283b06c29d0a6fb8c23c8d48f58" alt="amovZHXE.png" />
Porém o $ln[] não está funcionando. Será que fiz algo errado?
require("conexao.php");
$conn = new Conexao();
$sql = mysql_query("SELECT SUM('data') as total FROM downloads WHERE yearweek('data') = yearweek(curdate())");
while($ln = mysql_fetch_array($sql)){
$id = $ln['count'];
echo $id . "<br/>";
}faça um teste aí.. para contar os downloads faça uma página redirecionada quando clicar no download com o id do post aí fica primeira.
erro aqui >> http://puu.sh/hL5xb/19017da61f.png tire as aspas LoL
$sql = mysql_query("SELECT SUM(count) as total FROM downloads WHERE yearweek(data) = yearweek(curdate())"); LoL
aqui fica assim >> $id = $ln['total'];Coloquei 'total' apareceu 40301024366060. Está certo?
está somando tudo dessa tabela.. colocar where id do post e AND yearweek(data) = yearweek(curdate())
eu faço assim.. http://puu.sh/hL6uw/ee3e6df3ae.png
mas vou modificar para mostrar por dia depois.. graças a voce kkk
Ficou assim:
SELECT SUM(data) as total FROM downloads WHERE id_post = '$id' AND yearweek(data) = yearweek(curdate())
Resultado do echo: 20150512191806
Pelo que percebi o resultado é a data.
>
Ficou assim:
SELECT SUM(data) as total FROM downloads WHERE id_post = '$id' AND yearweek(data) = yearweek(curdate())
Resultado do echo: 20150512191806
Pelo que percebi o resultado é a data.
voce não leu o que eu falei não ? http://puu.sh/hL7hL/0be8a4eca0.png
está errado..
é assim >> SELECT SUM(count) as total FROM downloads WHERE id_post = '$id' AND yearweek(data) = yearweek(curdate())
Hmm, não tinha visto essa parte. Então assim ele já mostra quantidade por semana?
Sim.. faça o teste quando tiver com dados aí voce dá um retorno de como ficou..
Mas quando terminar a semana, como vai zerar o count? Ou não é preciso?
hmmm.. tipo, voce tem que fazer uma função.. nele vai criar os downloads de todos os dias..
aí no final da semana voce soma esses dias por semana ou até por mês..
aí verifica todo mês para delar os dias que passar dos 31 dias..
A primeira coisa a se fazer é efetuar uma pesquisa junto a Google/Bing, tentar elaborar a primeiras linhas do algoritmo, pois o que pode ser simples para você, pode ser muito amplo e complexo para a comunidade, ou vice versa.
Se tiver alguma dúvida poste o script após elaborar as primeiras linhas do seu algoritmo. E se mesmo assim, ainda não compreendeu como funciona um fórum, de uma lida no post abaixo:
http://forum.imasters.com.br/topic/375800-orientaes-para-uma-boa-participao/
:thumbsup:
E para falar, que não tem exemplos no Google.
https://goo.gl/k9Nswb