← PHP

Script em PHP para estatísticas de ganhos

Lida 8398 vezes

Offline

Manuel Moreira 
Membro
Mensagens 228 Gostos 0
Feedback +1

Troféus totais: 20
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Boas

Ando aqui ás voltas com um problema no desenvolvimento de um site: o painel com os ganhos dos utilizadores.

Para terem uma ideia mais concreta preciso de arranjar (comprar se não houver outro modo) um script em php que me permita mostrar os ganhos de um utilizador como no Adsense (no layout antigo basta).

Quero poder mostrar os ganhos do dia e usando MySql, mostrar os ganhos de outros meses ou até períodos de tempo costumizados.

Alguém conhece algum script que faça isto?

Desde já agradeço a ajuda.


MM
Offline

asturmas 
Administrador
Mensagens 19734 Gostos 50
Feedback +2

Troféus totais: 39
Trófeus: (Ver todos)
Mobile User Windows User Super Combination Combination Topic Starter 100 Poll Votes 50 Poll Votes 10 Poll Votes Poll Voter Poll Starter

O que queres fazer concretamente? Um scritp gestor de publicidade?
Já tens um desenho da base de dados? Nunca pensei nisso mas tudo depende da forma que armazenes os dados..
Offline

Manuel Moreira 
Membro
Mensagens 228 Gostos 0
Feedback +1

Troféus totais: 20
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Asturmas. o que pretendo é uma plataforma que me permita armazenar os ganhos dos utlizadores e uma forma de os poder mostrar ao mesmo. eu até já tenho alguma coisa em php e mysql feita, mas tem algumas falhas e provavelmente poderá ser feita de forma muito mais eficiente.

Resumidamente quero poder gerir os ganhos dos meus utilizadores (que ainda nem sequer existem lol) com uma plataforma php+mysql simples, tipo adsense (é o que ocorre mais frequentemente, mas há muitos outros)...

Se alguém tiver ideias, ou conhecer um produto destes que possa adquirir, força. Agradeço toda a ajuda a montar isto.

MM
Offline

jplopes 
Membro
Mensagens 13 Gostos 0
Troféus totais: 18
Trófeus: (Ver todos)
Super Combination Combination Level 4 Level 3 Level 2 Level 1 10 Posts First Post Signature Karma

Também não estou a perceber o que é que queres dizer com "armazenar os ganhos". Mas vou-me guiar pelo AdSense.

O que tens que registar é o número de impressões ou de cliques num determinado anúncio.

Para fazeres isto tens que ter um ficheiro responsável pela impressão do anúncio e outro pelo registo e redireccionamento em caso de clique.

Exemplo:

http://www.example.com/obterAnuncio.php?cliente=123781
Quando esta página fosse acedida um anúncio seria imprimido para o cliente 123781, e isso ficava registado.

O cliente é responsável por obter o conteúdo e apresentá-lo na sua página. Já tu tinhas que fazer com que o conteúdo tivesse uma hiperligação que aponta-se para o link responsável por registar e redireccionar o clique.

Exemplo:
http://www.example.com/redirecciona.php?cliente=123781&url=http://www.example.info
Quando alguém acedesse a este URL o cliente 123781 ficava com mais um clique registado e o utilizador era automaticamente redireccionado para a página certa.

Isto é uma teoria bem resumida de como as coisas podiam funcionar. Era ainda preciso implementar ferramentas de segurança para impedir que houvesse abuso por parte dos teus clientes, pois sem isso eles podiam simplesmente carregar no F5 um milhão de vezes para ganhar dinheiro.

Teria de haver ainda uma área que onde o cliente pudesse aceder para consultar os seus ganhos. Isto já são cálculos baseados nos preços definidos.
Offline

Manuel Moreira 
Membro
Mensagens 228 Gostos 0
Feedback +1

Troféus totais: 20
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Teria de haver ainda uma área que onde o cliente pudesse aceder para consultar os seus ganhos. Isto já são cálculos baseados nos preços definidos.

Obrigado jplopes, mas o que preciso é apenas disto mesmo que refere. Sem tirar nem pôr. Apenas preciso de uma ajuda na criação desta área onde o utilizador pode ver os seus ganhos.

PS: Acho que devo ter baralhado tudo ao referir o Adsense, o site nada tem a ver com pay per click. Apenas preciso de implementar um painel de ganhos tipo o do Adsense.



Cumps
MM
Offline

rjg 
Membro
Mensagens 43 Gostos 0
Feedback +1

Troféus totais: 24
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Level 5 Level 4 Level 3 Level 2 Level 1 10 Posts First Post

Offline

Manuel Moreira 
Membro
Mensagens 228 Gostos 0
Feedback +1

Troféus totais: 20
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Viva.

http://www.webtoolkit.info/php-adsense-account-monitor.html

Obrigado de qualquer forma, mas também não é isso que procuro.

Quero apenas ajuda na criação de um painel de ganhos em php e mysql. Só isso. Esqueçam o Adsense eh eh eh...


Cumps
MM
Offline

asturmas 
Administrador
Mensagens 19734 Gostos 50
Feedback +2

Troféus totais: 39
Trófeus: (Ver todos)
Mobile User Windows User Super Combination Combination Topic Starter 100 Poll Votes 50 Poll Votes 10 Poll Votes Poll Voter Poll Starter

Podes por favor introduzir o contexto de forma a que possas ser mais especifico?

No entanto e considerando que os ganhos são inseridos de forma manual... dia x user y ganhou z€
Queres de um mês? Query a todas as entradas do user y cuja data seja do mês k e por ai fora...
Offline

Manuel Moreira 
Membro
Mensagens 228 Gostos 0
Feedback +1

Troféus totais: 20
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Obrigado Asturmas e a todos que tentaram decifrar o meu pedido que infelizmente não ficou muito claro e quando referi Adsense só baralhei tudo.

Vou dizer-vos o que já tenho feito de forma algo arcaica mas funciona:

-   O utilizador "Manuel" registou-se no meu site.
-   Ao fazer login vai ver os seus ganhos. Para isso acede ao painel do ganhos.
-   De imediato vê quanto dinheiro fez hoje e tem a possibilidade de consultar outros períodos de tempo (mês actual, mês anterior, ultimos 7 dias...)

Estão a ver o que pretendo? Um painel de ganhos só isso :)


O meu problema está nas queries mysql que levam algum tempo (o site está algo lento), muito devido à estrutura da base de dados. Estou a gravar na base de dados os ganhos dos utilizadores em vários campos mais ou menos assim:

- nome | dia | hora | minuto | segundo (dos ganhos conseguidos e em campos distintos)

(Não se concentrem no modo de aprovar ganhos (é algo secundário neste caso) pois estes terão de ser feitos manualmente para evitar alguns "inconvenientes", ou poderão ser automatizados de acordo com a credibilidade acumulada do utilizador)

O que pretendia era saber se no fundo há alguma forma mais eficaz de o fazer usando uma plataforma pré-feita, rápida, segura e sólida, ou se alguém me consegue com a sua experiência dizer se há forma de melhorar tanto a estrutura da base de dados como as queries.

Desculpem se não fui suficientemente claro no início do post. Obrigado mais uma vez.



Cumps
MM
Offline

Gonçalo Martins 
Membro
Mensagens 229 Gostos 0
Troféus totais: 26
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

base dados

- nome | timestamp

depois se entendi bem estás  a gravar ao clike ou ao segundo em que os ganhos são auferidos para cada  utilizador...

o que quer dizer se um utilizador possuir 60 cliques ou ganhos difrentes numa hora criarás 60 novas linhas na DB para segundos e minutos difrentes o que teoricamente poderão ser proximas infinitas a linhas criadas num dia dependendo do numero de cliques gerados e so hardware utilizado.

isto para bastantes utilizadores e após algum tempo, irá criar um problema de escalabilidade da BD... por alguma coisa o adsense nao te permite ver a hora.

no maximo crias algo do genero

Nome | dia (tambem timestamp - de forma a diferenciar dias, anos e meses) | ganhos | hora cliques

nome é o id, ganhos é o numero de ganhos sempre a incrementar, e hora é o local onde armazenas a horas dos cliques por exemplo no formato:

|h-m-s|h-m-s|h-m-s|....
ou melhor ainda:
|timestamp (horas, minutos, segundos)|timestamp|timestamp....

ou ainda se quiseres preservar os ganhos de determinado segundo
|timestamp-ganhos|timestamp-ganhos|

o resto trabalhas com php/asp,etc... de acordo (no entanto tenta utilizar ao maximo as funçoes do mysql, ou outros), com os pedidos do utilizador. Isto  também por causa de limitaçoes de hardware, nao deves fornecer ou realizar selects desnecessários à coluna 'hora cliques', pelo tamanho que esta poderá atingir.

deves tambem utilizar por exemplo memcache para os selects e não fornecer a informação on-live... tal como acontece no google analytics... se o analytics fosse on-live eles teria dificuldades em escalar aquilo...

agora criar uma linha na BD por cada ganho auferido é que não...

a estrutura é valida quer para cliques quer para introduções manuais... para a introdução em determinado dia deves armazenar a info numa unica linha

Offline

Manuel Moreira 
Membro
Mensagens 228 Gostos 0
Feedback +1

Troféus totais: 20
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Gonçalo obrigado por teres feito uma análise tão detalhada ao meu problema e pelas soluções propostas. Resumidamente, a escalabilidade e os tempos de acesso acabam por ser problemas ultrapassados adoptando uma estrutura para a BD como a que me sugeres.

Assim e sabendo do que preciso vou reorganizar a BD deste modo:

nome | Data onde há ganhos a registar | Timestamp - ganho1 # Timestamp - ganho2 # Timestamp - ganho3 ... |

Com 3 campos apenas acho que consigo fazer tudo (ainda não implementei).

Logo, apenas crio novas linhas na BD quando o utilizador tem ganhos a registar e numa linha coloco todos os ganhos desse dia. Cum caneco que maravilha! Como é que eu não pensei nisto antes?!!! Eh eh eh... Quem sabe, sabe.

Gonçalo nem tens noção do quanto isto me ajuda. Um enorme obrigado!!!

PS: +rep


Cumps
MM
Offline

jtk 
Membro
Mensagens 141 Gostos 0
Troféus totais: 22
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Com essa BD/tabela não normalizada, mais tarde ou mais cedo vais ter problemas quando começares a usa-la.

nome (id) | data | ganho |

é a minha sugestão.

Offline

Gonçalo Martins 
Membro
Mensagens 229 Gostos 0
Troféus totais: 26
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

se ele normalizar aquilo terá que criar mais tabelas e irá incindir sobre o mesmo problema que é querer guardar os ganhos auferidos em determinado segundo sem afectar performance a longo prazo, nos selects

1) id | data | ganho (este ganho teria que ser o ganho total do dia)
2) id | nome <-id chave primaria

3) id | data ! segundo | ganho
id | data |segundo | ganho
id | data | segundo | ganho
e ai vamos nós....

mas pode-me estár a escapar algo

no entanto deveria utilizar, sim:

(int) id | (string) nome
(int) id |(timestamp) Data dia do ano x onde há ganhos a registar | (int)ganhos | (string) Timestamp - ganho1 # Timestamp - ganho2 # Timestamp - ganho3 ... |

para os updates a estas linhas deverás dár uma vista de olhos à função 'concat' do mysql por exemplo onde te permite simplesmente adicionares a info do segundo pretendido no final da string sem teres de trabalhar dados em php
Offline

Manuel Moreira 
Membro
Mensagens 228 Gostos 0
Feedback +1

Troféus totais: 20
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Obrigado JTK mas isso levar-me ía ao mesmo problema que tenho actualmente: tempos de acesso enormes e tabelas com uma dimensão absurda.

Gonçalo, mais uma vez no ponto:
(int) id | (string) nome
(int) id |(timestamp) Data dia do ano x onde há ganhos a registar | (int)ganhos | (string) Timestamp - ganho1 # Timestamp - ganho2 # Timestamp - ganho3 ... |

para os updates a estas linhas deverás dár uma vista de olhos à função 'concat' do mysql por exemplo onde te permite simplesmente adicionares a info do segundo pretendido no final da string sem teres de trabalhar dados em php


É isto que vou implementar. Parece-me sem dúvida alguma uma solução boa, tanto em termos de escalabilidade como de rapidez de acesso. E será em princípio uma boa base para a construção de qualquer tabela deste género, ou seja, é um modelo que poderá ser implementado em outros projectos que não apenas este.

Mais uma vez obrigado a todos pela colaboração e em especial a todos que tiveram a paci~encia de tentar decifrar o que eu pretendia.

Cumps
MM
Offline

jtk 
Membro
Mensagens 141 Gostos 0
Troféus totais: 22
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Em relação às 2 soluções, não sei qual delas a mais eficiente/rápida.

Mas a 2ª parece-me problemática, quando tentares por uma aplicação/site a usa-la.

Problemas de vejo na segunda solução:

- Deixas de ter vários inserts por dia, passas a ter vários updates...

- Tens que ter lógica implementada, para ver se é o 1º acesso do dia, para saber se fazes um update ou insert..

- Do que me parece, não podes fazer querys a BD, pelo menos de forma natural
    -Saberes a media de ganhos de o utilizador num dia.
    -Saberes o utilizador com mais ganhos... etc
    -Não podes fazer nenhum select que use os ganhos, para fazer ordenação, condições etc...

- Ficas com menos linhas, para teres selects mais rápidos, mas isso obriga a que tenhas que implementar lógica e processamento sobre os resultados do select que fizeres no site, em php ou o que for...

- Caso queiras saber mais informação sobre ganhos (aprovado ou não, pagou ou não, etc...) como fazes ? vais concatenar isso com a string... tens que andar sempre a analisar a string com a informação toda? mesmo que só queiras um dos vários dados quardados na string...