Mysql选择在特定时间范围之间不忙的用户

时间:2017-02-01 23:12:36

标签: mysql time range

我有一个用户表和任务表。用户可以分配任务。每项任务都需要特定的时间范围。在tasks表中,我有一个user_id外键,date_start(unix timestamp)和date_stop(unix timestamp)。

让我们说我想把今天凌晨2:30到下午4:00之间发生的新任务分配给在这几个小时内免费的随机用户(没有分配给他的任何任务)将与新任务重叠。)

检索此类用户的正确SQL查询是什么?

2 个答案:

答案 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