Ir para conteúdo

POWERED BY:

Arquivado

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

Ariane Stela

[Resolvido] Agrupando arrays com certo campo igual

Recommended Posts

Olá galera,

 

estou recebendo de uma query um array serviços a clientes com o nome deles, quantidade de serviços e valor.

Acontece que alguns clientes tiveram mais de um serviço cadastrados com um valor diferente pra cada serviço.

Gostaria de agrupar por cliente a quantidade de serviço e o valor total destes serviços.

 

Existe alguma funçao para manipulação de arrays para juntar os clientes e somar a quantidade de serviços?? Depois pra somar o valor eu me viro.

 

Obrigada

beijo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa consulta traria o id do cliente e a soma do número de serviços destinados a ele

select distinct(cliente) as idc, (select sum(quantidade) from servicos where cliente = idc) as quantidade from servicos

 

Mas acho que entendi melhor agora, não há o campo quantidade, a quantidade é o número de registros sobre aquele cliente certo?

 

Então ficaria assim a query:

(Digamos que os clientes possuam um id)

 

select disctinct(id_cliente) as idc, nome, (select count(*) from servicos where id_cliente = idc) as quantidade, (select sum(valor) from servicos where id_cliente = idc) as valor_total from servicos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa consulta traria o id do cliente e a soma do número de serviços destinados a ele

select distinct(cliente) as idc, (select sum(quantidade) from servicos where cliente = idc) as quantidade from servicos

 

Mas acho que entendi melhor agora, não há o campo quantidade, a quantidade é o número de registros sobre aquele cliente certo?

 

Então ficaria assim a query:

(Digamos que os clientes possuam um id)

 

select disctinct(id_cliente) as idc, nome, (select count(*) from servicos where id_cliente = idc) as quantidade, (select sum(valor) from servicos where id_cliente = idc) as valor_total from servicos

bom.. no primeiro exemplo posso fazer a soma dos valores

 

obrigada

beijo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim com o mesmo nome??? nos de algum exemplo ariane...

 

qual a estrutura da array que voce quer concatenar? qual o retorno da query??

 

 

Existe outra funcao para arrays, a: array_combine(); ela combina os valores de 2 arrays em ordem:

 

<?
$nome = array(
        'Joao Escribano',
        'Ariane Stela'
);
$funcao = array(
        'Programador',
        'Programadora'
);

$array = array_combine($nome, $funcao);

print_r($array);
?>

RETORNO:

Array
(
    [Joao Escribano] => Programador
    [Ariane Stela] => Programadora
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que entendi...

 

 

seu array está nesse formato certo?

Array
(
    [0] => Array
        (
            [nome] => Rogério
            [quantidade_de_servico] => 10
            [valor] => 100
        )

    [1] => Array
        (
            [nome] => Rogério
            [quantidade_de_servico] => 5
            [valor] => 50
        )

    [2] => Array
        (
            [nome] => Rogério
            [quantidade_de_servico] => 2
            [valor] => 20
        )

    [3] => Array
        (
            [nome] => Ariane
            [quantidade_de_servico] => 1
            [valor] => 50
        )

)

 

Então tente isso:

$array = array(

    array(
        'nome' => 'Rogério',
        'quantidade_de_servico' => 10,
        'valor' => 100,
    ),
    
    array(
        'nome' => 'Rogério',
        'quantidade_de_servico' => 5,
        'valor' => 50,
    ),
    
    array(
        'nome' => 'Rogério',
        'quantidade_de_servico' => 2,
        'valor' => 20,
    ),
    
    array(
        'nome' => 'Ariane',
        'quantidade_de_servico' => 1,
        'valor' => 50,
    )

);

foreach( $array as $cliente){
    $clientes[ array_shift( $cliente ) ][] = $cliente;
}

print_r($clientes);

 

se o seu array não estiver nesse formato, mande o formato pra nós... e mande também o o formato desejado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se estiver tudo em uma tabela é só fazer um Select Agrupando por Cliente.


$sql = "select cliente, servicos from tabela order by cliente group by cliente";
$exe = mysql_query($sql);

while($res = mysql_fetch_array($exe))
{
   if($res['cliente'] != $cliente)
      echo '<br /><b>'.$res['cliente'].'</b>';
   
   echo '<br />'.$res['servicos'];

   $cliente = $res['cliente'];

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que entendi...

 

 

seu array está nesse formato certo?

Array
(
    [0] => Array
        (
            [nome] => Rogério
            [quantidade_de_servico] => 10
            [valor] => 100
        )

    [1] => Array
        (
            [nome] => Rogério
            [quantidade_de_servico] => 5
            [valor] => 50
        )

    [2] => Array
        (
            [nome] => Rogério
            [quantidade_de_servico] => 2
            [valor] => 20
        )

    [3] => Array
        (
            [nome] => Ariane
            [quantidade_de_servico] => 1
            [valor] => 50
        )

)

 

Então tente isso:

$array = array(

    array(
        'nome' => 'Rogério',
        'quantidade_de_servico' => 10,
        'valor' => 100,
    ),
    
    array(
        'nome' => 'Rogério',
        'quantidade_de_servico' => 5,
        'valor' => 50,
    ),
    
    array(
        'nome' => 'Rogério',
        'quantidade_de_servico' => 2,
        'valor' => 20,
    ),
    
    array(
        'nome' => 'Ariane',
        'quantidade_de_servico' => 1,
        'valor' => 50,
    )

);

foreach( $array as $cliente){
    $clientes[ array_shift( $cliente ) ][] = $cliente;
}

print_r($clientes);

 

se o seu array não estiver nesse formato, mande o formato pra nós... e mande também o o formato desejado...

 

 

está quase neste formato...

ele não tem a quantidade de serviço, a quantidade é o tanto de vezes que o nome "Rogério", por exemplo, aparece.

Não existe um campo com esta quantidade.

São dois campos: nome e valor

no resultado eu quero o nome, a quantidade e a soma dos valores

Compartilhar este post


Link para o post
Compartilhar em outros sites

aí galera,

vcs são d+, obrigada pela ajuda

solucionei na query mesmo

 

SELECT count(u.pk_usuario),u.nome_usuario, SUM(o.vlr_total_op) as SOMA

FROM tb_op o, tb_usuario u

WHERE **condições**

GROUP BY(nome_usuario)

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.