Ir para conteúdo

Arquivado

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

Gmartha07

Média e Soma PHP/Mysql

Recommended Posts

 

Galera blza??

To com um problema aqui que não consigo resolver..

Tenho essa tabela no Banco de Dados:

teste.png

 

O que eu estava querendo fazer é pega a média de pontos, rebotes, assistências.

O número de jogos é pela coluna TIMEID, ou seja, quantas vezes o nome do time apareceu é o número de jogos realizados.

 

 

Por exemplo:
Stephen Curry o time dele (WARRIORS) jogou 3 jogos.

Exemplo de como deveria imprimir o valor:

 

 

PLAYERS PONTOS REBOTES ASSISTENCIAS

Stephen Curry 6,67 6,67 6,67

Como eu faço isso??

Alguma idéia??

Valeu galera

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia.... primeiramente muda essa sua estrutura, não faz assim não de colocar o nome do jogador e o nome do time nessa tabela, vai por mim, isso mais pra frente pode lhe trazer informações erradas...

 

Cria uma tabela para JOGADORES e outra para TIMES.. e dai nesses campos dessa sua tabela vc coloca só o ID deles ao invés de escrever os nomes. Fica bem mais fácil e seguro de fazer a consulta...

 

 

 

Agora vamos com umas perguntas, qual a regra dessas médias?

 

Como vc quer fazer essas médias, vai ser de jogador x time por partida, ou apenas do jogador em relação a todos os jogos dele?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra pergunta,

 

Você quer obter estas informações calculando no PHP ou já trazer elas calculadas direto do banco de dados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia.... primeiramente muda essa sua estrutura, não faz assim não de colocar o nome do jogador e o nome do time nessa tabela, vai por mim, isso mais pra frente pode lhe trazer informações erradas...

 

Cria uma tabela para JOGADORES e outra para TIMES.. e dai nesses campos dessa sua tabela você coloca só o ID deles ao invés de escrever os nomes. Fica bem mais fácil e seguro de fazer a consulta...

 

 

 

Agora vamos com umas perguntas, qual a regra dessas médias?

 

Como você quer fazer essas médias, vai ser de jogador x time por partida, ou apenas do jogador em relação a todos os jogos dele?

Boa tarde.

Obrigado pela resposta.

Irei refazer esse banco futuramente da maneira que você me falou.

 

A média é simples. É do jogador x o numero total de jogos que ele disputou até o momento.

 

Estou sem solução até o momento.

 

Valeu pela ajuda.

Outra pergunta,

 

Você quer obter estas informações calculando no PHP ou já trazer elas calculadas direto do banco de dados?

Quero calcular elas direto dessa tabela.

Sem precisar inserir o resultado em outra tabela do bd.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom,

 

Basicamente você pode fazer isso de duas formas, trazer tudo calculado diretamente do banco de dados sem necessidade de usar outras tabelas, mas usando sub-querys talvez até uma stored procedure fosse o indicado, ou calcular tudo no php o que vai exigir alguns laços.

 

Se for optar pelo PHP, o seu primeiro passo vai ser criar uma consulta que busque os nomes dos jogadores sem repetição:

 

a query que poderá usar é a seguinte:

SELECT players FROM sua_tabela GROUP BY players

E com os resultados dessa consulta você fará um laço que consultara a soma dos pontos e total de jogos dos jogadores:

Pode usar a query abaixo pra fazer isso:

SELECT COUNT(idJogo) as totalJogos, SUM(pontos) AS totalPontos, SUM(rebotes) AS totalRebotes, SUM(assistencias) AS totalAssistencias FROM sua_tabela WHERE players LIKE "aqui_vem_o_resultado_da_query_anterior"

E o resto vai ser matemática básica no PHP:

vc pega os resultados e faz os cálculos de médias:

Ex.:

$mediaPontos = $totalPontos / $totalJogos;

Veja se consegue te ajudar... qualquer dúvida poste ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Opa RodriAndreotti

Muito obrigado pela ajuda

 

O que eu ainda não consegui fazer foi o seguinte.

Eu preciso fazer a média de acordo com a quantidade de jogos de cada time, e não pela quantidade de jogos total, ou seja:

Na tabela o campo timeid se refere ao time que o player joga.
A lógica seria eu fazer um COUNT de quantas vezes aparece o nome do time nessa tabela (o resultado seria o total de jogos da equipe) e dividir pelas respectivas somas.

No caso da tabela exemplo.

Stephen Curry:

SUM(pontos) = 30

Count(Warriors)= 3

Media Pontos = 10 pontos por jogo

 

Andre Iguodala

Sum(Pontos) = 33

Count(Warriors) = 3

Media Pontos = 11 pontos por jogo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo...

 

Saquei...

 

Então vamos lá

SELECT players, timeId FROM sua_tabela GROUP BY players
SELECT COUNT(idJogo) as totalJogos, SUM(pontos) AS totalPontos, SUM(rebotes) AS totalRebotes, SUM(assistencias) AS totalAssistencias FROM sua_tabela WHERE players LIKE "primeiro_campo_da_query_anterior" AND timeId LIKE "segundo_campo_da_query_anterior"

Vê se te traz o retorno que você precisa

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
$query1 = mysql_query("SELECT players, timeid FROM statsplayers GROUP BY players");
$query11 = mysql_fetch_array($query1);
while($query11 = mysql_fetch_array($query1)){
$jogador = $query11['players'];
$time = $query11['timeid'];


$query = mysql_query("SELECT COUNT(timeid) as totaljogos, SUM(pontos) AS totalpontos FROM statsplayers WHERE players LIKE '$jogador' AND timeid LIKE '$time'");
$query44 = mysql_fetch_array($query);
?>

RodriAndreotti

 

Estou usando esse código acima como você me passou..

 

Olha o resultado que estou obtendo:

 

teste2.png

 

a tabela esta da seguinte forma:

 

teste224.png

 

O correto seria estar:

 

JOG PTS

Stephen Curry 5

Kobe Bryant 8

Andre Iguodala 12,5

LeBron James 60

 

 

para imprimir os resultados estou fazendo:

<?php echo ($query44['totalpontos']/$query44['totaljogos']);?>

 

Alguma idéia do problema?

Ele tb não está mostrando todos os registros..

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem razão... acho que comi bola na query... por que o select vai buscar a contagem somente quando as duas situações forem verdadeiras.

 

Você vai precisar de uma terceira query:

SELECT players, timeId FROM sua_tabela GROUP BY players 
SELECT COUNT(idJogo) as totalJogos FROM sua_tabela WHERE timeId LIKE "segundo_campo_da_query_anterior"
SELECT  SUM(pontos) AS totalPontos, SUM(rebotes) AS totalRebotes, SUM(assistencias) AS totalAssistencias FROM sua_tabela WHERE players LIKE "primeiro_campo_da_query_anterior"

Vê se agora vai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodrigo..
Muito obrigado pela sua ajuda..
Já praticamente resolvi aqui..

Única coisa que ficou um pouco sugada, é que as vezes ele não mostra um ou outro jogador do banco..

testee.png

 

testee2.png

 

 

Alguma sugestão para esse comportamento do banco??

$query1 = mysql_query("SELECT players, timeid FROM statsplayers GROUP BY players");
$query11 = mysql_fetch_array($query1);
while($query11 = mysql_fetch_array($query1)){
$jogador = $query11['players'];
$time = $query11['timeid'];

$query2 = mysql_query("SELECT COUNT(timeid) as totaljogos FROM statsplayers WHERE timeid LIKE '$time'");
$query22 = mysql_fetch_array($query2);



$query = mysql_query("SELECT SUM(pontos) AS totalpontos FROM statsplayers WHERE players LIKE '$jogador'");
$query44 = mysql_fetch_array($query);
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz,

 

Esse comportamento eu nunca tinha visto acontecer, mas o que você pode tentar ver é se substituindo o campo players, por um id (seguindo a sugestão do wolfphw).

 

Porém desta forma já deveria ser o suficiente para funcionar.

 

Os nomes que ficam fora seguem algum padrão, ou é aleatório?

 

Abraços,

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.