2015-10-06 19 views
0

我嘗試了很多邏輯,但仍然沒有得到準確的結果。 我有2個字段shift_from和shift_to與datetime。數據庫中也存在相同的字段。 現在我必須檢查哪些用途在特定時間段內沒有被分配任何轉換。如何從數據庫中獲取未在特定日期和時間分配的用戶列表

預期結果: 查詢應返回輸入日期和時間內未佔用的用戶列表。使用

表:

  1. 用戶含用戶日期。
  2. role_users - 確定用戶的角色。
  3. 角色 - 確定角色列表。
  4. 班次 - 確定班次的詳細信息,如時間,日期,地點等。
  5. 公司 - 僅用於識別公司相關用戶。

注意:我從窗體獲取shift_from datetime,從from獲取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')) 

請幫我this.There也避免不之間的方式,因爲它是不考慮的那一天。它是隻在這些日期之間進行。

移位臺結構

'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

可以應用這樣的條件下,

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)) 
+0

我必須用這個/替換代碼。請解釋一下關於這個的一些邏輯,並且還在 –

+0

上面檢查一下變化。 –

+0

什麼時間段 –

相關問題