搜索未分配的时间段(分钟)

时间:2019-02-02 11:13:54

标签: mysql vb.net

我在WinForms应用程序(vb.net)中使用调度程序(日历),并将约会(startDateTime和endDateTime)保存到MySql数据库中。

在进行约会的过程中,我需要检查在特定日期的特定时间段(分钟)内是否有特定资源(例如会议室)。

我在这里寻找了适合我的情况的可能解决方案,但是,所有解决方案都与在特定时间段内搜索条目有关。

余存储开始时间和结束时间预约到DB以及任何所需的资源对于预约。

我可以拥有多个资源(例如:多个房间),并且希望在该时间段内无法使用默认(或选定房间)资源的情况下,找到一个房间的时间未分配。

时间段从10分钟到2个小时不等,但这始终是约会和资源类型的固定时间段,例如: 任命:董事会会议

资源:董事会会议室

开始时间: 2019年2月2日九点00分00秒

结束时间: 2019年2月2日10:00:00

任何帮助将不胜感激。

我喜欢的代码

SELECT (TIME(b.appStartTime) - TIME(a.appEndTime)) as timedifference, 
a.appID, a.appOwnerKey, a.appEndTime, b.appStartTime, a.appSubject, 
a.appDescription, a.appToolTip, a.appCategory, a.appImg, a.appPatWaiting

FROM cusAppointments a 
INNER JOIN cusAppointments b ON b.appID = (a.appID + 1)
WHERE (DATE(a.appStartTime) = DATE(NOW()) AND
       DATE(b.appEndTime) = DATE(NOW()))
AND (TIME(b.appStartTime) - TIME(a.appEndTime)) >= 15000
AND a.appOwnerKey = 'Admin .'
ORDER BY a.appStartTime ASC;

编辑: 这是行不通的,因为在我看来,我应该使用在StartTime上排序的同一表的两个记录集,然后从RecordSet B的rowid + 1的StartTime中减去RecordSet A的rowid的EndTime。

1 个答案:

答案 0 :(得分:0)

经过深思熟虑,意识到有些事情我没有考虑,我决定将处理工作交给客户。

我没有考虑的因素: 1. StartOfDay时间(办公时间开始) 2. EndOfDay时间(办公时间结束) 3.获取首次预订-检查“首次预订”与StartOfDay之间的未分配时间段 4.获取上次预订-检查上次预订到EndOfDay之间的未分配时间段

我使用了一个简单的If..Else语句块来实现该逻辑,并且只需要11条代码行即可检查所有内容。 首先,我检查“首次预订”,然后检查我是否在“首次预订”的StartTime和StartOfDay时间之间有一个开放时间段。

第二次检查用于最后一次预订,以查看最后一次预订的EndTime和EndOfDay时间之间是否有空位。

第三部分是处理第一次预订和最后一次预订之间的所有预订。             (1)检查在第一个返回的记录和Start Of Day之间是否存在一个TimeSlot             '-检查我们是否有第一条记录(j = 0)             '-检查myEndTime是否小于或等于第一条记录的dbStartTime             '-检查myStartTime是否大于或等于StartOfDay             '-检查第一个记录的dbStartTime与StartOfDay之间的时差,并检查是否             'myTimeSlot小于或等于该时间

        If j = 0 AndAlso myEndTime <= dbStartTime AndAlso
            myStartTime >= StartOfDay AndAlso (dbStartTime - StartOfDay) >= myTimeSlot Then
            txtResults.AppendText("Found Time Slots" & vbCrLf)
            'Check for LAST record and do similar as for FIRST record
        ElseIf j = clReadFromDB.tmsData.Rows.Count - 1 AndAlso myEndTime <= EndOfDay AndAlso
            (EndOfDay - dbEndTime) >= myTimeSlot Then
            txtResults.AppendText("Found Time Slots" & vbCrLf)
            'Check for a time slot inbetween the FIRST and LAST record
            '   - We don't have to bother with checking for StartOfDay or EndOfDay
            '   - Check if myStartTime >= dbEndTime of the Current Record (j)
            '   - Check if myEndTime <= dbStartTime of the Next Record (j+1)
            '   - Check if myTimeSlot is <= to the time difference between dbDStartTime of Current Record
            '     and dbStartTime of the Next Record
        ElseIf myStartTime >= clReadFromDB.tmsData.Rows(j).Item(2) AndAlso
            myEndTime <= clReadFromDB.tmsData.Rows(j + 1).Item(1) AndAlso
            (clReadFromDB.tmsData.Rows(j + 1).Item(1) - clReadFromDB.tmsData.Rows(j).Item(2)) >= myTimeSlot Then
            txtResults.AppendText("Found Time Slots" & vbCrLf)
            lblStatus.Text = Convert.ToString(clReadFromDB.tmsData.Rows(j + 1).Item(1) - clReadFromDB.tmsData.Rows(j).Item(2))
        Else
            lblStatus.Text = "Time Slot not found"
            txtResults.AppendText("Time Slot Not Found" & vbCrLf)
        End If

我将上面的代码用作基础逻辑,因为这贯穿数据库上的所有预订。它还使用“首次预订”作为初始检查,而不是用户为新预订选择的“日历时间”。

感谢那些尝试提供帮助的人,尽管您的建议并没有使我更接近MySQL解决方案,但是它的确扩大了我对MySQL的了解。