Gmartha07 0 Denunciar post Postado Junho 18, 2015 Galera blza??To com um problema aqui que não consigo resolver..Tenho essa tabela no Banco de Dados: 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
wolfphw 60 Denunciar post Postado Junho 18, 2015 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
RodriAndreotti 25 Denunciar post Postado Junho 18, 2015 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
Gmartha07 0 Denunciar post Postado Junho 18, 2015 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
RodriAndreotti 25 Denunciar post Postado Junho 18, 2015 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
Gmartha07 0 Denunciar post Postado Junho 18, 2015 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
RodriAndreotti 25 Denunciar post Postado Junho 18, 2015 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
Gmartha07 0 Denunciar post Postado Junho 18, 2015 <?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: a tabela esta da seguinte forma: 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
RodriAndreotti 25 Denunciar post Postado Junho 18, 2015 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
Gmartha07 0 Denunciar post Postado Junho 18, 2015 RodrigoAi no caso com essas 3 queres, qual delas fica no WHILE? Compartilhar este post Link para o post Compartilhar em outros sites
RodriAndreotti 25 Denunciar post Postado Junho 18, 2015 As duas últimas Compartilhar este post Link para o post Compartilhar em outros sites
Gmartha07 0 Denunciar post Postado Junho 18, 2015 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.. 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
RodriAndreotti 25 Denunciar post Postado Junho 19, 2015 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
Gmartha07 0 Denunciar post Postado Junho 27, 2015 Rodrigo Muito obrigado pela ajuda.. Parou de acontecer o erro.. Era nome duplicado.. Valeu Compartilhar este post Link para o post Compartilhar em outros sites