for encadeado
amigos por favor me ajudem, eu já não tenho mais ideias.
é o seguinte, um cliente precisa de um relatorios que nele aparesça o total de horas que todos os funcionarios dele trabalhou, durante um periodo que ele mesmo coloca.
vamos ao problema
primeiro eu fiz um select com for para selecionar o periodo informado e dentro deste for eu fiz outro select selecionando só os funcionarios.
então ficou assim o primeiro laço seleciona o periodo, e o segundo seleciona os funcionarios baseados na data em que o primeiro laço informar.
o problema é que o relatorio ficou um diario, com todos os dias informados aparescendo, e não é isso que ele quer, ele quer apenas um relatorio por periodo que ele informar, de todos os pontos de todos os funcionarios.
é o seguinte, um cliente precisa de um relatorios que nele aparesça o total de horas que todos os funcionarios dele trabalhou, durante um periodo que ele mesmo coloca.
vamos ao problema
primeiro eu fiz um select com for para selecionar o periodo informado e dentro deste for eu fiz outro select selecionando só os funcionarios.
então ficou assim o primeiro laço seleciona o periodo, e o segundo seleciona os funcionarios baseados na data em que o primeiro laço informar.
o problema é que o relatorio ficou um diario, com todos os dias informados aparescendo, e não é isso que ele quer, ele quer apenas um relatorio por periodo que ele informar, de todos os pontos de todos os funcionarios.
comentários (1)
suspender
Lista de Respostas:
24/09/2010 2:21pm
(~14 anos atrás)
(~14 anos atrás)
Cara
Acho que você tem que fazer ao contrário
Primeiro você seleciona todos os funcionários.
E dentro deste laço, você vai fazer outro select para verificar as horas que cada funcionário trabalhou.
Neste segundo for, você vai incrementar as horas e no fim de cada laço você mostra apenas o total...
Tipo
Seria algo mais ou menos assim...
Acho que você tem que fazer ao contrário
Primeiro você seleciona todos os funcionários.
E dentro deste laço, você vai fazer outro select para verificar as horas que cada funcionário trabalhou.
Neste segundo for, você vai incrementar as horas e no fim de cada laço você mostra apenas o total...
Tipo
$rs = mysql_query(...); while($func = mysql_fetch_array($rs)){ $rs2 = mysql_query(...); while($dados = mysql_fetch_array($rs2)){ $horas += (int)$dados['horas']; } echo $func['nome'] . ' trabalhou ' . $horas . ' horas<br />'; }
Seria algo mais ou menos assim...
27/09/2010 9:08pm
(~14 anos atrás)
(~14 anos atrás)
cara muito o brigado pela a tentativa, mas para que eu faria a consulta primeiro de funcionarios, se depois eu terei de fazer por data sendo que a data é por periodo?
27/09/2010 11:45pm
(~14 anos atrás)
(~14 anos atrás)
Fiz uma pergunta a vc pelo comentário, mas acho que vc não viu. Então, vou partir do princípio de que vc está querendo fazer uma lista de funcionários com a soma das horas de cada um no período especificado.
Se o banco está bem modelado, é possível fazer isso em uma só query.
Vc teria que usar o SELECT Sum para somar as horas; então aplicar um GROUP BY funcionarios; por último, filtrar pelo período especificado: WHERE data BETWEEN $data_inicial_do_form AND $data_final_do_form; e, se quiser, ordenar, por exemplo, por funcionário: ORDER BY funcionario.
Se o banco está bem modelado, é possível fazer isso em uma só query.
Vc teria que usar o SELECT Sum para somar as horas; então aplicar um GROUP BY funcionarios; por último, filtrar pelo período especificado: WHERE data BETWEEN $data_inicial_do_form AND $data_final_do_form; e, se quiser, ordenar, por exemplo, por funcionário: ORDER BY funcionario.