MySQL和PHP,比较两个表,获取日期和分配值

时间:2012-01-09 14:51:03

标签: php mysql sql

我目前有2张桌子。一个有员工clockin时间,一个有他们的日程安排。我想要完成的是每天运行一次以检查谁是准时,早,晚或缺席。感谢fabianhjr在我的上一篇文章中,我能够找到早期或按时使用MySQL的人

    $query = "SELECT cms.date, cms.userID, cms.login, oc_schedule.start_time, oc_schedule.userID 
    FROM cms 
    INNER JOIN oc_schedule ON oc_schedule.start_time >= cms.login AND oc_schedule.userID = cms.userID";

现在找到迟到或缺席的人我有CMS和oc_schedule表。 CMS是跟踪人们登录时(它是一个预先存在的系统)和我刚刚制作的oc_schedule的表,并输入表中的所有日程表,其中行userID,星期六 - 星期六,其中Y或N为其值, start_time和end_time。

所以我现在需要做的是检查CMS的日期,找到当天的名字,给它分配一个Y值,检查oc_schedule给那些当天有价值Y的人,然后检查安排start_time,如果他们登录,如果是,那么什么时间。将按时或早进的人员移动到另一张桌子中,以及每个迟到或缺席的人进入已迟到的桌子。

到目前为止,这是我已经为迟到和缺席的名单所做的。现在它所做的只是找到空的或者比调度时间更长的登录,但如果没有它比较日期它就不会真正起作用。我现在正在回应这些表,只是为了看它无需发布到数据库即可。

    <?php 
    mysql_connect("localhost", "root", "") or die(mysql_error()); 
    mysql_select_db("sacc") or die(mysql_error()); 

    $query = "SELECT cms.date, cms.userID, cms.login, oc_schedule.start_time, oc_schedule.userID, oc_schedule.sunday, oc_schedule.monday, oc_schedule.tuesday, oc_schedule.wednesday, oc_schedule.thursday, oc_schedule.friday, oc_schedule.saturday
    FROM cms
    RIGHT OUTER JOIN oc_schedule
    ON oc_schedule.userID = cms.userID AND oc_schedule.start_time < cms.login";

    $result = mysql_query($query) or die(mysql_error());

    echo "<table cellpadding='5' border='0' style='border: 1px solid black;border-collapse:collapse'>
    <tr>
    <th style='border: 1px solid black;'>Date</th>
    <th style='border: 1px solid black;'>CID/WIN</th>
    <th style='border: 1px solid black;'>Scheduled Login</th>
    <th style='border: 1px solid black;'>Late Login Time</th>
    </tr>";

    while($row = mysql_fetch_array($result)) {

    echo "<tr style='text-align: center;'>";
    echo "<td style='border: 1px solid black;'>" . $row['date'] . "</td>";
    echo "<td style='border: 1px solid black;'>" . $row['userID'] . "</td>";
    echo "<td style='border: 1px solid black;'>" . $row['start_time'] . "</td>";
    echo "<td style='border: 1px solid black;'>" . $row['login'] . "</td>";
    echo "</tr>";

    }
    echo "</table>";
    ?>

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

没有测试,这可能是一个答案。它给出了一个表格,每个类型都有一个标题(早期/开启时间/晚期/缺席),然后是所有类型的记录。

$query  = "SELECT ";
$query .=     "cms.date, cms.userid, cms.login, ";
$query .=     "s.start_time, s.sunday, s.monday, s.tuesday, s.wednesday, s.thursday, s.friday, s.saturday ";
$query .= "FROM ";
$query .=     "cms ";
$query .=     "RIGHT OUTER JOIN oc_schedule s ON s.userid = cms.userid ";
$query .= "ORDER BY ";
$query .=     "(s.start_time - cms.login) AS offset";

$result = mysql_query($query) or die(mysql_error());

$lasttype = "";

while($row = mysql_fetch_array($result)) {
    if($row['cms.login'] == ""){
        $curtype = 'Absent';
    } else {
        switch($row['offset']){
            case > 0: $curtype = 'Early'; break;
            case < 0: $curtype = 'Late'; break;
            case 0: $curtype = 'On Time'; break;
        }
    }

    if($curtype != $lasttype){
        ?>
            <tr>
                <th colspan="4"><?=$curtype?></th>
            </tr>
        <?
    }

    ?>
        <tr>
            <td><?=$row['date']?></td>
            <td><?=$row['userid']?></td>
            <td><?=$row['start_time']?></td>
            <td><?=$row['login']?></td>

        </tr>
    <?

    $lasttype = $curtype;
}

示例:

ABSENT
20-jan-12 123 09:00:00 NULL
20-jan-12 124 09:00:00 NULL
LATE
20-jan-12 125 09:00:00 09:20:00
20-jan-12 126 09:00:00 09:05:00
ON TIME
20-jan-12 127 09:00:00 09:00:00
EARLY
20-jan-12 128 09:00:00 08:50:00
20-jan-12 129 09:00:00 08:30:00