2014-10-17 63 views
0

我有兩個表,其中一個有時間表,其他表有可用時間。結構如下基於從其他表引用的多個時間獲取表數據

tbl_schedules 

id Int 
userid Int 
schedulefrom Datetime 
scheduletill Datetime 


tbl_useravailability 

id 
userid 
availablefrom 
availabletill 

在同一天tbl_useravailability中可以有多行用戶。也就是說,用戶可以從2014:10:17 05:00:00 to 2014:10:17 12:00:00, 2014:10:17 15:00:00 to 2014:10:17 18:00:00, 2014:10:17 19:00:00 to 2014:10:17 23:00:00

所面臨的挑戰是選擇其他用戶的時間表,從計劃表中給定的可用性一天像where userid <> 1;

+0

我不知道如果我得到這個權利,但不能用BETWEEN解決嗎? – baao 2014-10-17 13:20:50

+0

沒有邁克爾..我們將在tbl_useravailability中有多行 – 2014-10-17 14:27:13

回答

0

感謝您爲鏈接和努力花費解決此問題。我在你的查詢中做了一些修改,並得到了這個工作。謝謝

SELECT 
    S.id AS scheduleid, 
    S.userid, 
    S.schedulefrom, 
    S.scheduletill, 
    UA.id AS availabilityid, 
    UA.availablefrom, 
    UA.availabletill 
FROM 
    tbl_schedules AS S 
JOIN tbl_useravailability AS UA 
    ON S.schedulefrom between UA.availablefrom and UA.availabletill 

WHERE 
    UA.userid=1 and s.userid <> 1 
1

如何在http://sqlfiddle.com/#!2/f94e6/1/0類似如下(查看樣本):

SELECT 
    S.id AS scheduleid, 
    S.userid, 
    S.schedulefrom, 
    S.scheduletill, 
    UA.id AS availabilityid, 
    UA.availablefrom, 
    UA.availabletill 
FROM 
    tbl_schedules AS S 
JOIN tbl_useravailability AS UA 
    ON S.userid = UA.userid 
    AND S.schedulefrom >= UA.availablefrom 
    AND S.scheduletill <= UA.availabletill 
WHERE 
    S.userid <> 1 

這會顯示所有用戶的可用性在其計劃週期內。