我对标题问题感到抱歉,我不清楚我想做什么,但我不知道如何解释,请阅读以获得进一步解释:
我有两个表,一个是'employees',它们有employeesName和employeesInTime(他们应该上班的时间)。
然后我有一个seconde表,员工记录他们上班的时间,它有行employeesName,timeIn和timeOut。
我需要做的是实施一个系统,在那里我可以看到每个员工的所有“时间”,并告诉他们是否按时,迟到或根本不去上班。
最终报告应如下所示:
Employees Name // In // Out // Month - Jan
1 / 2 / 3 / 4 / 5 / 6 / ......
john smith 8:00 17:00 P P P L M P .......
(P为及时,L为迟,M为失踪)。 当你将鼠标悬停在信件上时,它还应该告诉他们什么时候进来。
到目前为止,我得到的是一张包含所有员工的表格,以及他们应该进出的时间。
对于另一部分(月报),我完全被困住了。
我明白了:
$query2 = "select * from info where `inout`='in' ";
$result2 = mysql_query($query2);
if($result2 === FALSE) {
die(mysql_error()); // valid only on development stage for debugging
}
while($row = mysql_fetch_array($result2))
{
$timeIn = "".$row['timestamp']."";
$name = "".$row['fullname']."";
$timeIn = $timeIn + @$tzo;
echo '<strong>'.$name . '</strong>: ' . date($timefmt, $timeIn) .'<br />';
}
mysql_free_result($result2);
这给了我所有来自员工的内容,但问题是我多次得到同一个员工。对于所有员工,我需要从一名员工那里得到所有的东西。
我应该非常感谢任何指示我应该去哪个方向。我想我应该以某种方式加入两个表来获得我想要的结果,但无论我怎么认为我无法确定哪个查询将从一个员工获得所有内容,然后为所有员工获取所以它看起来像所需的表格报告。
如果在上一个问题中已经回答过这个问题,那么请指点我,我很抱歉我在这里搜索了stackoverflow,但是没有找到类似的东西。
感谢您的时间。
编辑:这是SQLFiddle
答案 0 :(得分:1)
编写一个查询,返回31个月中的31个字段并不是一个好的解决方案,因此您需要一个查询,每月返回每个员工多次。
我会粗略地概述一下我会做什么,所以你也有工作,弄清楚细节:)。首先从第一个表创建一个表,每个员工都有一个数组:
$employees = array(
'emp1' => array('name' => 'emp1', 'in' => 8, 'out' => 16),
'emp2' => array(...),
...);
然后在第二个表中查询本月的输入和输出,并将其保存到上一个数组中:
foreach($row = mysql_fetch_array($result2)) {
$day = ...; // count it from timestamp
$timeOfDay = ....; // count it from timestamp
$employees[ $row['name'] ]['checks'][$day][ $row['inout'] ] = $timeOfDay;
}
是的,这是一个复杂的数组数组。
最后,打印报告:
foreach($row = mysql_fetch_array($result2)) {
$day = ...; // count it from timestamp
$timeOfDay = ....; // count it from timestamp
$employees[ $row['name'] ]['checks'][$day][ $row['inout'] ] = $timeOfDay;
}
foreach($employees as $employee) {
print $employee['name'] . ':';
// for loop through days,
// otherwise missed days would not be shown
for( $day = 1; $day < $maxDay; $day++) {
// it would be nice to check, whether 'in' and 'out' values both exist
if (array_key_exists($day, $employee['checks'])) {
if ($employee['in'] <= $employee['checks'][$day]['in'] &&
$employee['out'] <= $employee['checks'][$day]['out']) {
print ' P ';
} else {
print ' L ';
}
} else {
print ' M ';
}
}
}