php - 如何从数据库中获取在特定日期和时间段内未分配的用户列表

标签 php mysql

我尝试了很多逻辑,但仍然没有得到准确的结果。 我有 2 个带有日期时间的字段shift_from和shift_to。数据库中也存在相同的字段。 现在我必须检查哪些用途在特定的起始日期和截止日期期间没有分配任何类次。

预期结果: 查询应返回在输入的日期和时间内未被占用的用户列表。

使用的表格:

  1. users - 包含用户日期。
  2. role_users - 确定用户的角色。
  3. roles - 确定角色列表。
  4. 轮类 - 确定轮类详细信息,例如时间、日期、地点等。
  5. 公司 - 仅识别公司相关用户。

Note: I am getting shift_from datetime from a form and shift_to datetime from from.

我的努力: 我的查询如下:

SELECT u.id,u.name FROM users as u
left join role_user as ru on u.id=ru.user_id 
left join roles as r on ru.role_id=r.id
left join shift_assignment as saa on saa.user_id=u.id
left join shifts as s on s.id=saa.shift_id 
left join companies as c on u.company_id= c.id 
WHERE r.name='security_officer_agents' and 
c.id=$company_id and ((DATE('$shift_from_date') NOT BETWEEN DATE('s.shift_from') and DATE('s.shift_to') and TIME('$shift_from_time') NOT BETWEEN TIME('s.shift_from') and TIME('s.shift_to')) or (DATE('$shift_to_date') NOT BETWEEN DATE('s.shift_from') and DATE('s.shift_to') and TIME('$shift_to_time') NOT BETWEEN TIME('s.shift_from') and TIME('s.shift_to'))

请帮助我解决这个问题。还有一种方法可以避免不在之间,因为它没有考虑那一天。它只在这些日期之间进行。

类次表结构

'id', 
`location_id` ,   
`duty_point_id`,    
`contact`,    
`phone`,   
`shift_from`,    
`shift_to` ,    
`created_by` ,    
`created_at`,     
`updated_at`,   
 PRIMARY KEY (`id`),    
KEY    `shifts_location_id_foreign` (`location_id`)

最佳答案

你可以像这样应用条件,

fromtimedbfieldname < '$endtimephpvarible' 
AND 
totimedbfieldname > '$starttimephpvarible'

这个条件可以解决你的问题。

s.shift_from < $shift_to_date
AND
s.shift_to > shift_from_date

像上面一样,你必须更换。如果用户在这些日期之间被分配,它将返回 true。

$shift_to_date=date("Y-m-d H:i:s",strtotime($shift_to_date))

关于php - 如何从数据库中获取在特定日期和时间段内未分配的用户列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32970108/

相关文章:

php - HTML5 服务器发送事件如何工作?

php - CodeIgniter 2.1.0 的 session 库中是否存在已知错误?为什么我会被踢出去?

mysql - 有两个表时限制如何工作?

c# - 获取所有数据的一个查询与 300 个特定查询

MySQL查询日期范围

mysql - 我想在插入新数据时从表中删除旧数据

javascript - 简码作为 WordPress 中的值

php - 第一个脚本使用 $.ajax 但它不起作用

java - 无法通过jsp连接mysql数据库,Class.forName(com.mysql.jdbc.Driver);未加载

php - 上个月Paypal的IPN有没有变化?