我正在尝试编写一个 MySQL 函数,该函数使我能够汇总员工在设定时间段(即 1 天、1 周、1 个月等)内完成的工作量。完成的每一项工作都会生成 1 个 ID 条目在数据库中。
条目的日期设置为时间戳。
我的问题是,我不清楚如何对数据库进行多次调用,以检查在设定的时间戳期间内生成了多少条目。
下面是数据库表
CREATE TABLE staffwork(
staff_id MEDIUMINT UNSIGNED NOT NULL,
id_of_work_inserted MEDIUMINT UNSIGNED NOT NULL,
job_id MEDIUMINT UNSIGNED NOT NULL,
data_table VARCHAR (65) NOT NULL,
entrytime int(11) NOT NULL,
INDEX message (staff_id)
);
下面是将数据放入表中的查询,即时间戳:
INSERT INTO staffwork
(staff_id, job_id, id_of_work_inserted, data_table, entrytime )
VALUES ('$staff_id', '$job_id', '$id_of_job', '$data_table', UNIX_TIMESTAMP(now()) )";
下面是我的 SQL 函数:
函数 statsForEmployeesWork ($staff_id) { 全局 $dbc;
$select = " SELECT
COUNT(job_id) AS totalWorkDone,
COUNT(job_id) AS oneDaysWorkDone,
COUNT(job_id) AS oneWeekWorkDone,
COUNT(job_id) AS oneMonthWorkDone
";
$from = " FROM
staffwork
";
$where = " WHERE
staff_id = '$staff_id
AND
entrytime >= now() - interval '1 day'
AND
entrytime >= now() - interval '1 week'
AND
entrytime >= now() - interval '1 month '";
$query = $select.$from. $where;
$result = mysqli_query ($dbc, $query)
return $result ;
}
我非常感谢对此的一些帮助和建议。
最佳答案
你的entrytime字段是一个int,这意味着你不能使用直接的mysql日期数学,你最终会做类似的事情
12345678 > '2013-11-14'
这毫无意义。将日期范围转换为整数,或将整数字段转换为普通日期:
WHERE FROM_UNIXTIME(entrytime) >= now() - interval 1 day
WHERE entrytime >= UNIX_TIMESTAMP(now() - interval 1 day)
更好的是,将输入时间转换为实际的日期时间字段,然后您的原始查询将按预期工作。
关于MySql 将多个时间戳查询分组在同一个查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20005016/