0

for encadeado

criado por luan alves em 19/09/2010 8:55am
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.

Lista de Respostas:

0
24/09/2010 2:21pm
(~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
$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...

0
27/09/2010 9:08pm
(~14 anos atrás)
luan alves respondeu:
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?

0
27/09/2010 11:45pm
(~14 anos atrás)
Jayme A. C. Gimenez respondeu:
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.

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)