我尝试过很多逻辑但仍未获得准确的结果。 我有2个字段shift_from和shift_to,其中日期时间。数据库中也存在相同的字段。 现在我必须检查在特定的时间和日期之间没有分配任何移位。
预期结果 查询应返回在输入的日期和时间内未被占用的用户列表。
使用的表:
注意:我从表单中获取shift_from datetime,而从。来获取shift_to datetime。
我的努力: 我的查询如下:
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`)
答案 0 :(得分:0)
你可以申请这样的条件,
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))