我试图提出一个 SQL 查询,该查询将列出特定时间跨度内的行,该时间跨度取决于当前时间。调用此查询的函数将检查用户是否在系统中,否则会将其列为缺席。
例如,一个类在 9:00 开始,查询应将 ScheduleTimeStart 和 ScheduleTimeEnd 与当前时间进行比较。仅当时间为 9:00 及以后时,查询才应列出行,但如果当前时间超过 30 分钟冷却期,则不会列出行。换句话说,从 9:00 到 9:30。
到目前为止我做了什么:
SELECT studentID, scheduleID, scheduleDate, scheduleTimeStart, scheduleTimeEnd, schedule.classID, schedule.unitsID
FROM schedule
JOIN schedule_students USING(scheduleID)
JOIN students USING(studentID)
WHERE scheduleDate=CURDATE()
AND scheduleTimeStart >= CURTIME() //Gordons answer
AND scheduleTimeStart < CURTIME() + interval 30 minute// but its not working
AND studentID=1003;
最佳答案
首先,学会使用参数。不要将 SQL 字符串与值混合在一起。这可能会导致语法错误和 SQL 注入(inject)漏洞。
SELECT s.*
FROM schedule s
WHERE scheduleID = ? AND classID = ? AND unitsID = ? AND
DATE(scheduleDate) = CURDATE() AND
scheduleTimeStart >= CURTIME() AND
scheduleTimeStart < CURTIME() + interval 30 minute;
尚不清楚您是否希望在 scheduleTimeEnd
上也有相同的条件。
关于mysql - 列出取决于时间限制的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43028674/