我尝试了很多逻辑,但仍然没有得到准确的结果。 我有 2 个带有日期时间的字段shift_from和shift_to。数据库中也存在相同的字段。 现在我必须检查哪些用途在特定的起始日期和截止日期期间没有分配任何类次。
预期结果: 查询应返回在输入的日期和时间内未被占用的用户列表。
使用的表格:
- users - 包含用户日期。
- role_users - 确定用户的角色。
- roles - 确定角色列表。
- 轮类 - 确定轮类详细信息,例如时间、日期、地点等。
- 公司 - 仅识别公司相关用户。
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/