Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera to com uma duvida escabrosa que gostaria de ajuda... vou explicar a logica
tenho 3 tabelas: jobs, pecas e propostas
o que estou fazendo é o seguinte:
1- a tabela jobs é pai de pecas ou seja, so pode ter um job mais varias pecas dentro dele;
2- a tabela propostas é pai de jobs, cada id de proposta pode ter varios jobs com as varias pecas incluida em cada job
nas pecas é onde estao os valores que somados da o valor total do job até ai tudo bem, já esta dando certo o resultado do while mais qd jogo este resultado para o while de propostas ele duplica a soma e soma todos; vou postar o codigo
//Jobs e pecas
$jobs = mysql_query("SELECT * FROM tb_jobs")or die(mysql_error());
while($rowJobs = mysql_fetch_assoc($jobs)){
$somaPecas = mysql_query("SELECT id_job, SUM(vl_peca) FROM tb_pecas WHERE id_job = '".$rowJobs[id]."'");
while($rowSubPeca = mysql_fetch_assoc($somaPecas)){
echo $resultaSubPeca = $rowSubPeca['SUM(vl_peca)'];
}
//resultado satisfatorio
job 1 => valorpeca1(100) + valorpeca2(100)=R$ 200,00 //valores ficticios apenas para ilustrar
job 2 => valorpeca3(250) + valorpeca4(150)=R$ 400,00
...
}
*até aqui tudo bem, ele ta calculando direitinho as query acima problema está qd pego a mesma query acima e jogo dentro de outro while abaixo (sendo que agora ele pega apenas os jobs do mesmo id de proposta) ele nao faz o calculo de todas as peças, mais agora ele precisa somar de mais de 1 job, ele ta pegando apenas o primeiro registro de job e soma:
//Propostas
$propostas = mysql_query("SELECT * FROM tb_propostas")or die(mysql_error());
while($rowProposta = mysql_fetch_assoc($propostas)){
//Jobs e pecas
$jobs = mysql_query("SELECT * FROM tb_jobs WHERE id_job = '$rowProposta[id_job]' ")or die(mysql_error());
while($rowJobs = mysql_fetch_assoc($jobs)){
$somaPecas = mysql_query("SELECT id_job, SUM(vl_peca) FROM tb_pecas WHERE id_job = '".$rowJobs[id]."'");
while($rowSubPeca = mysql_fetch_assoc($somaPecas)){
echo $resultaSubPeca = $rowSubPeca['SUM(vl_peca)'];
}
}
//resultado
proposta 1= job 1 => valorpeca1(100) + valorpeca2(100)=R$ 200,00 + job 2 => valorpeca3(250) + valorpeca4(150)=R$ 400,00 => resultado= R$ 200
//era pra somar os 2 jobs, mais ele pega apenas a soma de do job 1.
*lembrando que o resultado da query de proposta vem assim:
proposta 1 => id_job[1][2] em strings
}
ja tentei de tudo e me embaralhei, ajuda aí galera!
>
Tenta assim:
<?php
//Propostas
$somatudo = 0;
$propostas = mysql_query("SELECT * FROM tb_propostas")or die(mysql_error());//Jobs e pecas
$jobs = mysql_query("SELECT * FROM tb_jobs WHERE id_job = '$rowProposta[id_job]' ")or die(mysql_error());$somaPecas = mysql_query("SELECT id_job, SUM(vl_peca) FROM tb_pecas WHERE id_job = '".$rowJobs[id]."'");
while($rowSubPeca = mysql_fetch_assoc($somaPecas)){
$somatudo += $rowSubPeca['SUM(vl_peca)'];
}
}
}
echo $somatudo;
Ja tinha feito assim, ele ate soma, mais so o primeiro resultado, dai como ta dentro do while ele acaba somando e todos os registros de todas as propostas, sendo que e pra somar apenas de cada proposta;você quer exibir o valor total de cada uma proposta? se for, tenta assim:
<?php
//Propostas
$somatudo = 0;
$propostas = mysql_query("SELECT * FROM tb_propostas")or die(mysql_error());//Jobs e pecas
$jobs = mysql_query("SELECT * FROM tb_jobs WHERE id_job = '$rowProposta[id_job]' ")or die(mysql_error());$somaPecas = mysql_query("SELECT id_job, SUM(vl_peca) FROM tb_pecas WHERE id_job = '".$rowJobs[id]."'");
while($rowSubPeca = mysql_fetch_assoc($somaPecas)){
$somatudo += $rowSubPeca['SUM(vl_peca)'];
}
}
echo "Valor da Proposta: ".$somatudo;
}Da nao, está retornando assim:
300, 400
deveria retornar a soma 700
Veja se isso funciona, substitua tudu aquilo por isso:
SELECT SUM(vl_peca) FROM tb_propostas, tb_jobs, tb_pecas WHERE
id_job = tb_propostas.id_job AND
id_job = id_peca
GROUP BY id_job;
ainda não deu, mais descobri como daria, só nao sei como fazer, seguinte:
como ele busca mais de um resultado assim dar certo, mais como fazer?
$idJobsRegistro = "3,5";
//numeros apenas de exemplo com se fosse o registro id_job[3] e id_job[5].
entendido? entao quando lanço isto ele faz a a soma correta, somando os resultados
$somaPecas = mysql_query("SELECT id_job, SUM(vl_peca) FROM tb_pecas WHERE id_job IN(".$idJobsRegistro.")");
while($rowSubPeca = mysql_fetch_assoc($somaPecas)){
$resultaSubPeca = $rowSubPeca['SUM(vl_peca)'];
//Resultado satisfatorio
resultados da soma das pecas do id_job[3] + id_job[3] = 300 //por exemplo
}
o problema é q o resultado da consulta de jobs vem assim: 35 (3-5);
tentei fazer isto mais da erro na query:
$jobsPropostaArray = $rowJobsProposta['id_job'];
$idJobsRegistro = implode(",", $jobsPropostaArray);
ta quase dando, alguma dica?
Foi mau minha resposta anterior estava muito errado
tente assim
SELECT SUM(vl_peca) FROM tb_pecas, WHERE
id_job = id_peca AND
id_job = tb_propostas.id_job AND
GROUP BY id_job;
se puder poste também a estrutura das tabelas
>
Foi mau minha resposta anterior estava muito errado
tente assim
SELECT SUM(vl_peca) FROM tb_pecas, WHERE
id_job = id_peca AND
id_job = tb_propostas.id_job AND
GROUP BY id_job;
se puder poste também a estrutura das tabelas
>
Foi mau minha resposta anterior estava muito errado
tente assim
SELECT SUM(vl_peca) FROM tb_pecas, WHERE
id_job = id_peca AND
id_job = tb_propostas.id_job AND
GROUP BY id_job;
se puder poste também a estrutura das tabelas
pra dar certo, ele teria que reconhecer o array dos registros (ex.: 3,5) e na query ele buscar eles
$somaPecas = mysql_query("SELECT id_job, SUM(vl_peca) FROM tb_pecas WHERE id_job IN(".$idJobsRegistro.")");
estrutura das tabelas:
*tb_jobs //aqui sao cadastrados os jobs, só pode ter um por id
id_job
id_cliente
titulo
*tb_pecas//aqui vao as pecas, que poder ser varias para cada job cadastra acima;
id_peca
id_job
titulo
*tb_propostas//aqui vao as propostas, que puxam apenas os jobs cadastrados em cada proposta
id_proposta
data
*tb_propostasJobs//aqui vao os jobs incluidos em cada proposta acima
id
id_proposta
id_job
Preciso que o resultado seja retornado com uma virgula entre os resgistros;
ex.: 3,5
até consegui o usando o implode("," , $registro); porém desta forma retorna assim: 3,5, (, no final) aí dar erro na consulta, precisaria remover esta ultima virgula e gravar como um array para buscar na query ...WHERE id IN($registros_pesquisar)...
Tenta assim:
<?php
//Propostas
while($rowProposta = mysql_fetch_assoc($propostas)){
//Jobs e pecas
while($rowJobs = mysql_fetch_assoc($jobs)){