Autor Tema: Contar registros por fechas  (Leído 3955 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado rgcu

  • Novato
  • *
  • Mensajes: 5
  • Puntuación: 0
  • Sexo: Masculino
    • Ver Perfil
Contar registros por fechas
« : 18 de agosto de 2013, 02:36:24 am »
Buenas noches.

Estoy realizando un sistema de control de asistencias en PHP pero quiero hacer una consulta en la base de datos MySql que me permita ver los dias trabajados los empleados de forma general. Quiero seleccionar un departamento y que se liste todos los empleados y el total de dias trabajados para cada uno.

Soy nuevo en php espero puedan ayudarme.

Desconectado Carlos Belisario

  • Moderador Global
  • Fanático
  • *****
  • Mensajes: 263
  • Puntuación: 17
  • Sexo: Masculino
  • software lover
    • Ver Perfil
Re:Contar registros por fechas
« Respuesta #1 : 19 de agosto de 2013, 05:38:59 pm »
el problema que indicas es muy genérico, cual es la duda puntual que tienes??

Desconectado rgcu

  • Novato
  • *
  • Mensajes: 5
  • Puntuación: 0
  • Sexo: Masculino
    • Ver Perfil
Re:Contar registros por fechas
« Respuesta #2 : 19 de agosto de 2013, 08:22:49 pm »
El detalle es que no se como realizar la consulta a mi base de datos que me permita generar un reporte con los departamentos y usuarios y asi mismo me cuente los dias que han asistidos los mismos. Hice una consulta usando (count) pero me devuelve solo un usuario en especifico realizando la consulta por cedula y por rango de fechas, hice una consulta con mysql_num_rows y de igual forma me cuenta los registros pero me repite los dias y se los coloca a cada usuario(osea si un empleado tiene 2 dias laborados se los coloca a todos)

Este es parte del codigo de consulta que realizo actualmente:

$result=mysql_query("SELECT * FROM horarios, personal WHERE horarios.IdEmpleado=personal.Id
                    and cedula LIKE '$cedula%' and Fecha BETWEEN '$fecha1' and '$fecha2'");
                    $numero_filas=mysql_num_rows($result);
                    while ($row = mysql_fetch_object($result)){
                    echo "<table width='1024' align='center'>";
                    echo "<tr>";
                    echo "\t<td width='33%'>$numero_filas </td>\n";
                    echo "\t<td width='33%'><center>$row->huenombre</td>\n";
                 echo "\t<td width='33%'><center>$row->puesto</td>\n";
                    echo "<TR><BR>\n";
                    }
Las tablas son personal y horarios:

Tabla personal

Id
huenombre
huehuella
puesto
Fechaini
--------------------
Tabla horarios

IdHorario
IdEmpleado
HEntrada
HSalida
Fecha
-------------------

Muchas gracias por el tiempo.

Desconectado Carlos Belisario

  • Moderador Global
  • Fanático
  • *****
  • Mensajes: 263
  • Puntuación: 17
  • Sexo: Masculino
  • software lover
    • Ver Perfil
Re:Contar registros por fechas
« Respuesta #3 : 20 de agosto de 2013, 05:17:12 pm »
si vas a hacer un count debes hacer un GROUP BY por usuario, persona o lo que sea que quieras agrupar para que te diga por persona, usuario o lo que agrupes cuanto hay por cada uno de ellos, eso es mas de SQL si colocas el SQL con el COUNT que usaste puede que se te ayude más

Desconectado rgcu

  • Novato
  • *
  • Mensajes: 5
  • Puntuación: 0
  • Sexo: Masculino
    • Ver Perfil
Re:Contar registros por fechas
« Respuesta #4 : 21 de agosto de 2013, 02:09:38 pm »
Este es el codigo que he utilizado amigo.


$result=mysql_query("SELECT IdEmpleado, COUNT(Id) as conteo FROM horarios, personal WHERE horarios.IdEmpleado=personal.Id
                    and cedula LIKE '$cedula%' and Fecha BETWEEN '$fecha1' and '$fecha2' GROUP BY IdEmpleado");
                    $numero_filas=mysql_num_rows($result);
                    while ($row = mysql_fetch_array($result)){
                    echo "<table width='1024' align='center'>";
                    echo "<tr>";
                    echo "\t<td width='15%'>$row[$numero_filas]</td>\n";
                    echo "\t<td width='20%'><center>$row[$cedula]</td>\n";
                    echo "\t<td width='20%'><center>$row[$huenombre]</td>\n";
                    echo "\t<td width='20%'><center>$row[$hueapellido]</td>\n";
                 echo "\t<td width='20%'><center>$row[$puesto]</td>\n";
                    }

Desconectado danech

  • Novato
  • *
  • Mensajes: 4
  • Puntuación: 0
    • Ver Perfil
Re:Contar registros por fechas
« Respuesta #5 : 22 de agosto de 2013, 01:34:09 am »
Hola, en la estructura de tu base de datos se ve muy ambigua. No sé si es que omitiste información o tuviste problemas en las formas normales.

 Yo tendría tres tablas:

 Departamento
    Id_dep (Campo clave del departamento)
    des_dep (Descripción del Departamento)

Personal
   Id_emp (Id empleado)
  .....................................
.........................................
 id_dep
etc


Horario
 id_emp
..............
.............
............
............

etc


 Colocas como tabla de selección a departamento donde vas realizar la selección, luego a partir de allí conectar con las otras tablas se sería algo parecido a esto.

"SELECT COUNT(departamento.Id_emp) as conteo FROM departamento,horarios, personal WHERE departamento.id_dep="'.$departamento."'  and  departamento.id_dep= personal.id_dep and personal.id_emp=horario.id_emp and Fecha BETWEEN '$fecha1' and '$fecha2'"  and Fecha BETWEEN '$fecha1' and '$fecha2' "

 Recuerda que con los las listas en HTML puedes colocar la descripción y ellas te pasan el id, donde la variable $departamento es lo que tomas del formulario cuando lo pasa por el post.

  Espero que te haya servido.
                   

 
« Última Modificación: 22 de agosto de 2013, 01:36:55 am por danech »

Desconectado rgcu

  • Novato
  • *
  • Mensajes: 5
  • Puntuación: 0
  • Sexo: Masculino
    • Ver Perfil
Re:Contar registros por fechas
« Respuesta #6 : 27 de septiembre de 2013, 12:13:25 pm »
Queridos amigos muchas gracias por sus buenas ideas.

He solucionado mi problema y aqui les dejo el SQL de la consulta para que la usen a futuro.

SELECT huenombre, hueapellido, cedula, puesto, count( * ) totales
FROM personal, horarios
WHERE horarios.IdEmpleado = personal.Id
AND fecha
BETWEEN '2013-01-01'
AND '2013-12-12'
GROUP BY puesto, cedula;