2014-10-17 65 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 

这会显示所有用户的可用性在其计划周期内。