我有一个用户表和任务表。用户可以分配任务。每项任务都需要特定的时间范围。在tasks表中,我有一个user_id外键,date_start(unix timestamp)和date_stop(unix timestamp)。
让我们说我想把今天凌晨2:30到下午4:00之间发生的新任务分配给在这几个小时内免费的随机用户(没有分配给他的任何任务)将与新任务重叠。)
检索此类用户的正确SQL查询是什么?
答案 0 :(得分:0)
我认为date_start
总是在date_stop
之前。
基本上我认为用户的任务将在下午4:00之后开始,或者任务在凌晨2:30之前完成。
limit 1
当然只负责从DB中取一个用户。
select * from (
select * from users
join tasks on users.user_id = tasks.user_id
where unix_timestamp(str_to_date('Feb 02 2017 04:00pm', '%M %d %Y %h:%i%p')) < from_unixtime(tasks.date_start)
or
unix_timestamp(str_to_date('Feb 02 2017 02:30am', '%M %d %Y %h:%i%p')) > from_unixtime(tasks.date_stop)
) limit 1
答案 1 :(得分:0)
select u.id
from users u
cross join tasks new_task
where new_task.id = :your_task_id
and not exists (
select *
from tasks user_task
where user_task.user_id = u.id
and user_task.date_start < new_task.date_stop
and user_task.date_stop > new_task.date_start
)
limit 1