Ir para conteúdo
Fórum Script Brasil
  • 0

Gerando relatorio - agrupando valores dinamicos dentro de um array


vccrespo

Pergunta

Estou fazendo um relatório p/ gerar gráficos. Através de uma consulta sql eu chego a esses dados:

Nº DE PEDIDOS POR LOCALIDADE

Mês - cidade - estado - país - num_de_pedidos

Set, 2008 - sete lagoas - MG - BRA - 24

-------------------------------------------------------------------------------------------------------------

Set, 2008 - Brumadinho - MG - BRA - 04

-------------------------------------------------------------------------------------------------------------

Out, 2008 - Brumadinho - MG - BRA - 32

-------------------------------------------------------------------------------------------------------------

Out, 2008 - belo horizonte - MG - BRA - 32

-------------------------------------------------------------------------------------------------------------

Out, 2008 - são paulo - SP - BRA - 12

-------------------------------------------------------------------------------------------------------------

Nov, 2008 - belo horizonte - MG - BRA - 42

-------------------------------------------------------------------------------------------------------------

Nov, 2008 - sete lagoas - MG - BRA - 07

-------------------------------------------------------------------------------------------------------------

Nov, 2008 - Brumadinho - MG - BRA - 12

-------------------------------------------------------------------------------------------------------------

Nov, 2008 - são paulo - SP - BRA - 23

A partir desses resultados, devo gerar um relatório com gráficos das cidades, estados e países que efetivaram pedidos na loja.

Os valores p/ o relatório das cidades está fácil. Porém, quero aproveitar a consulta e fazer a soma do número de pedidos realizados nos estados e nos países também.

Ex.: OUTUBRO DE 2008

ESTADO: MINAS GERAIS

NÚM. DE PEDIDOS: 64 (32+32=64)

ESTADO: SÃO PAULO

NÚM. DE PEDIDOS: 12 (12)

PAÍS: BRASIL

NÚM. DE PEDIDOS: 76 (32+32+12=64)

O problema é que podem ter um número XXXXXXX de cidades, de estados e países; e criar filtros do tipo (if campo_cidade == ‘belo horizonte’ {...}) para todo canto do mundo seria inviável.

Por isso preciso da ajuda de vocês. Teria uma boa maneira de agrupar esses valores?

obrigado,

Victor

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0
Já pensou em um simples select:

select cidade FORM table WHERE = $cidade

Olá Norivan,

a consulta na tabela esta ok. O resultado que eu demonstrei acima é o esperado.

pegando aquele resultado acima, o que eu preciso é de agrupar os registros que são do mesmo mês e do mesmo estado para gerar um gráfico de "estados com pedidos na loja"; e de agrupar os registros do mesmo mês e do mesmo país para gerar o gráfico de "países com pedidos na loja".

sei que consigo isso fazendo ao invés de uma consulta -como está no exemplo acima - fazendo 3 consultas. Separando e agrupando os resultados por [1]cidade, [2]estado e [3]países. Só que visualizando a exemplo acima, os valores já estão todos lá, bastando apenas somá-los.

bom, teria como agrupar esses valores desse modo, sabendo que os valores de estado e país podem variar (centenas de países, milhares de estados e cidades)? Como criar uma condição para agrupar esses valores nesse caso?

Editado por vccrespo
Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

O que o Norivan quis dizer foi em modificar a SQL que gera essa consulta. Tu podes modificá-la ou criar uma nova?

Link para o comentário
Compartilhar em outros sites

  • 0
Olá!

O que o Norivan quis dizer foi em modificar a SQL que gera essa consulta. Tu podes modificá-la ou criar uma nova?

Olá Wanderson,

Acho que entendi agora.

Posso modificar sim... mas, vocês estão falando é em criar consultas separadas p/ cidade, estado e país???

eu estou insistindo com essa query porque os resultados já estão listados nela, e porque nesse relatório há outras, p/ gerarem outros gráficos simultaneamente.

Queria reduzir o tamanho do php, e também do acesso ao DB...

Utilizar consultas separadas seria a melhor, ou a única saída?

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, você pode fazer por cidades, agrupando-as. Porém, seria muito melhor se este tópico fosse movido para MySQL. Vou avisar o Moderador ^_^. QUalquer coisa chama! =D

Link para o comentário
Compartilhar em outros sites

  • 0
Sim, você pode fazer por cidades, agrupando-as. Porém, seria muito melhor se este tópico fosse movido para MySQL. Vou avisar o Moderador ^_^. QUalquer coisa chama! =D

Wanderson, pelo sql eu sei fazer isso...

Se puder não mova o tópico não...

O que eu preciso é de uma solução para agrupar esses dados (do ex. acima) através do PHP.

Link para o comentário
Compartilhar em outros sites

  • 0

Quanto a implementação do php, não coloquei porque pensei que seu problema era apenas de lógica de fonte de dados:

Você quer a quantidade de registros que o select que te passei vai retornar certo?

então logo use uma função que te retorne o total de registros, por exemplo a mysql_num_rows():

$cidade = $_GET['SEU PARAMETRO'];

$q = mysql_query("select cidade FORM table WHERE = $cidade ", $conexao);
$total_de_cidades = mysql_num_rows($q);

Faça a implementação da varriavel $cidade pegando o valor de post, get ou seja lá o que for e pronto

Para mais detalhes consulte o manual: http://br2.php.net/manual/pt_BR/function.mysql-num-rows.php

Link para o comentário
Compartilhar em outros sites

  • 0

Bom amigos, acho que minha explicação foi falha... acabei confundindo voces...

mas o que eu queira era apenas uma estrutura de comparação para filtrar dados resultantes de uma consulta (o ex. acima já é o resultado da consulta). No meu caso, após a consulta, eu jogo todos os valores em um array, e depois monto os valores para gerarem os gráficos. O que pegava era como filtrar dados já que eles podiam ter valores inimagináveis.

Acho que consegui uma solução. já testei somando todos os num_de_pedidos pelo mes. Estou testando agora para armazenar os valores e criar o gráfico de num_de_pedidos de estados e de países.

continuo quebrando a cabeça, mas acho que vai ser isso aqui:

RESULTADO DA CONSULTA:

Mês - cidade - estado - país - num_de_pedidos

Set, 2008 - sete lagoas - MG - BRA - 24

-------------------------------------------------------------------------------------------------------------

Set, 2008 - Brumadinho - MG - BRA - 04

-------------------------------------------------------------------------------------------------------------

Out, 2008 - Brumadinho - MG - BRA - 32

-------------------------------------------------------------------------------------------------------------

Out, 2008 - belo horizonte - MG - BRA - 32

-------------------------------------------------------------------------------------------------------------

Out, 2008 - são paulo - SP - BRA - 12

-------------------------------------------------------------------------------------------------------------

Nov, 2008 - belo horizonte - MG - BRA - 42

-------------------------------------------------------------------------------------------------------------

Nov, 2008 - sete lagoas - MG - BRA - 07

-------------------------------------------------------------------------------------------------------------

Nov, 2008 - Brumadinho - MG - BRA - 12

-------------------------------------------------------------------------------------------------------------

Nov, 2008 - são paulo - SP - BRA - 23

$a = 1;
foreach ($rows as $k=>$row){
    $rows[$k]['mes'] = $row['mes'];
    $rows[$k]['estado'] = $row['estado'];
    
    if ( $rows[$k-1]['mes'] == '' || $rows[$k-1]['mes'] == $rows[$k]['mes'] ){ // filtrando dados pelo mes. Se for true, ira somar ou agrupar os valores desse mes
    
        $pedidos_total = $pedidos_total+$row['num_de_pedidos']; //soma pedidos do mesmo mes
        $arr_pedidos_total[$a]['pedidos_total'] = $row['num_de_pedidos'];

        // aqui filtrará e somará os valores pelo ESTADO
        if ( $rows[$k-1]['estado'] == '' || $rows[$k-1]['estado'] == $rows[$k]['estado'] ){
            // aqui soma os valores do campo  num_de_pedidos como acima??
        }
        elseif ( $rows[$k-1]['estado'] != '' && $rows[$k-1]['estado'] != $rows[$k]['estado'] ){
            // aqui zera e cria um novo índice no array para armazenar a soma de num_de_pedidos do outro estado (caso tenha)??
        }
        
        // aqui filtrará e somará os valores pelo PAÍS
        if ( $rows[$k-1]['pais'] == '' || $rows[$k-1]['pais'] == $rows[$k]['pais'] ){
            // aqui soma os valores do campo  num_de_pedidos como acima??
        }
        elseif ( $rows[$k-1]['pais'] != '' && $rows[$k-1]['pais'] != $rows[$k]['pais'] ){
            // aqui zera e cria um novo índice no array para armazenar a soma de num_de_pedidos do outro estado (caso tenha)??
        }
  
    }
    elseif ( $rows[$k-1]['mes'] != '' && $rows[$k-1]['mes'] != $rows[$k]['mes'] ){ // guardando a soma do mes num array, zerando a var responsável pela soma de pedidos total no mes e criando um novo índice
    
        $arr_pedidos_total[$a]['pedidos_total'] = $pedidos_total; // guarda a soma do mes no array
        $a++; //incrementa para gerar um novo índice para o novo mes
        $arr_pedidos_total[$a]['pedidos_total'] = $row['num_de_pedidos'];
        $pedidos_total = 0;//zera a variavel já que continha o valor do mes anterior
        $pedidos_total = $row['num_de_pedidos'];//recebe seu primeiro valor
    }
}

print_r($arr_pedidos_total);

//RESULTADO (SOMA DOS PEDIDOS DO MES): Array ( [1] => Array ( [pedidos_total] => 28 ) [2] => Array ( [pedidos_total] => 76 ) [3] => Array ( [pedidos_total] => 84 ) )

Bom, acho que é isso, ou quase. E a opnião de vocês?

Agradeço desde já a colaboração de vocês.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...