如何从数据库

时间:2015-10-06 12:33:48

标签: php mysql

我尝试过很多逻辑但仍未获得准确的结果。 我有2个字段shift_from和shift_to,其中日期时间。数据库中也存在相同的字段。 现在我必须检查在特定的时间和日期之间没有分配任何移位。

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

使用的表:

  1. 用户 - 包含用户日期。
  2. role_users - 确定用户的角色。
  3. roles - 确定角色列表。
  4. shift-确定班次细节,如时间,日期,地点等。
  5. 公司 - 仅识别公司相关用户。
  6.   

    注意:我从表单中获取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`)
    

1 个答案:

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