我正在尝试使用RFID构建自动出勤站点,目前MySQL已经记录了学生进入校园的时间和日期,但是我希望每个出勤时间都用该时间标记为“迟到”或“准时”他们进入了校园。
例如,学生A在7:11 AM在大门处轻按RFID,这将被标记为LATE,学生B在6:55 AM在大门处轻触其RFID,这将在MySQL的早期被标记。
我是JavaScript,MySQL和jQuery的初学者,所以我不知道使用哪个代码。我是自学成才的,所以我尝试在线搜索教程,但是对于这个教程,似乎找不到它的教程。
这是我的RFID标签代码。
<?php
require_once 'admin/connect.php';
$student = $_POST['student'];
$time = date("H:i", strtotime("+8 HOURS"));
$date = date("Y-m-d", strtotime("+8 HOURS"));
$q_student = $conn->query("SELECT * FROM `student` WHERE `student_no` = '$student'") or die(mysqli_error());
$f_student = $q_student->fetch_array();
$student_name = $f_student['firstname']." ".$f_student['lastname'];
$conn->query("INSERT INTO `time` VALUES('', '$student', '$student_name', '$time', '$date')") or die(mysqli_error());
echo "<h3 class = 'text-muted'>".$student_name." <label class = 'text-info'>at ".date("h:i a", strtotime($time))."</label></h3>";
这是当学生点击他/她的ID时我的数据库当前的样子:
嗨!我遇到了MYSQL错误,我不知道如何解决
。\ libraries \ classes \ Display \ Results.php#4196:PhpMyAdmin \ Display \ Results-> _ getSortedColumnMessage(
,
字符串“ student_name
”,
)
。\ libraries \ classes \ Sql.php#1666:PhpMyAdmin \ Display \ Results-> getTable(
,
数组
数组
布尔值true,
)
。\ libraries \ classes \ Sql.php#1468:PhpMyAdmin \ Sql-> getHtmlForSqlQueryResultsTable(
,
字符串'./themes/pmahomme/img/',
空值,
数组
布尔假,
整数0
整数0
布尔值true,
,
数组
布尔值true,
)
。\ libraries \ classes \ Sql.php#2250:PhpMyAdmin \ Sql-> getQueryResponseForNoResultsReturned(
数组
字符串“ db_sars”,
字符串“时间”,
空值,
整数0
,
空值,
字符串'./themes/pmahomme/img/',
空值,
,
字符串'SELECT date
,student_no,student_name,time
,当时间> \ '07:00 \'THEN \'LATE \'ELSE \'ON TIME \'END AS标签从{{1 }} time
> = CURDATE()-在\ '05:00 \'和\ '09:00 \'之间按date
,{{1 }}',
空值,
)
。\ import.php#758:PhpMyAdmin \ Sql-> executeQueryAndGetQueryResponse(
数组
布尔假,
字符串“ db_sars”,
字符串“时间”,
空值,
空值,
空值,
空值,
空值,
空值,
字符串'tbl_structure.php',
字符串'./themes/pmahomme/img/',
空值,
空值,
空值,
字符串'SELECT time
,student_no,student_name,date
,当时间> \ '07:00 \'THEN \'LATE \'ELSE \'ON TIME \'END AS标签从{{1 }} student_name
> = CURDATE()-在\ '05:00 \'和\ '09:00 \'之间按date
,{{1 }}',
空值,
空值,
)
答案 0 :(得分:0)
(请避免使用图片显示问题的关键部分)。
您的time
表似乎包含以下列:
student
student_name
time
date
您似乎没有关于学生到达或离开的信息。这使您的逻辑有些棘手。假设time
和05:00
之间的09:00
表中的任何行都表示到达,并且07:00
之后的任何到达都被认为是较晚的。您可以使用此查询获取上周的学生到达列表。必要时,它们将带有标签LATE
,否则将带有标签ON TIME
。
SELECT `date`, student, student_name, `time`,
CASE WHEN time > '07:00' THEN 'LATE' ELSE 'ON TIME' END AS tag
FROM `time`
WHERE `date` >= CURDATE() - INTERVAL 7 DAY
AND `time` BETWEEN '05:00' AND '09:00'
ORDER BY `date`, `student`
我想这就是标记每个出席者的意思。
编辑:如果要在网站上显示这些标签LATE
,则数据库中不需要多余的列。只需使用与我显示的查询类似的查询即可;查询本身包含定义延迟的规则并应用标签。然后显示查询的结果。通常,更改表以插入可从每行的现有内容派生的条件不是一个好主意。 (如果您有数亿行,并且必须denormalize表才能获得性能,那就不一样了。但是您离那一步还很遥远。)
专业提示:请勿在表或列的名称中使用诸如DATE
和TIME
之类的保留字。这样做会使查找错误变得更加困难。