我正在开发一个显示事件列表的应用程序。最初,应用程序使用的是Drupal,并将事件显示为“range”。因此,如果在3/4、3/6、3/8有一个事件,它会将日期显示为3/4 - 3/8。
我最近将这个应用程序移植到了一个自定义解决方案中,因为事件已经变得更加高级。客户端刚刚请求此行为令人困惑。他希望它是3/4,3/6,3/8,但我们也需要处理连续的日期。
因此,如果我们有事件3/4、3/6、3/8和3/10、3/11、3/12 -我们需要看到以下3/4、3/6、3/8、3/10-3/12
目前,事件列表有一个主事件表
EventID (int)
Event (varchar)
Active (tinyint)和事件日期表
EventDateID(int)
EventDate
EventTime
EventID下面是我的SQL语句
SELECT *, MIN(tblEventDates.EventDate) AS minDate
FROM tblEvents INNER JOIN tblEventDates
ON tblEvents.EventID = tblEventDates.EventID
WHERE tblEvents.Active = 1
AND tblEventDates.EventDate >= CURDATE()
GROUP BY tblEvents.EventID
ORDER By minDate, EventTime我内部JOINing这两个表,以产生事件的清单。在输出循环期间,我再次查询,获取单个EventDates并生成范围
SELECT MAX(EventDate) AS maxDate, MIN(EventDate) AS minDate
FROM tblEventDates
WHERE EventID = '$EventID'我只是不确定最好的方法是确定是显示范围的这一部分还是显示孤立的日期。
有什么建议吗?
发布于 2014-03-05 10:42:09
我不能完全理解为什么你没有在你的原始查询中得到范围:
SELECT *, MIN(tblEventDates.EventDate) AS minDate, MAX(tblEventDates.EventDate) AS maxDate
FROM tblEvents INNER JOI
tblEventDates
ON tblEvents.EventID = tblEventDates.EventID
WHERE tblEvents.Active = 1 AND
tblEventDates.EventDate >= CURDATE()
GROUP BY tblEvents.EventID
ORDER By minDate, EventTime;如果这样做,那么就不需要额外的查询来获得maxDate。
https://stackoverflow.com/questions/22187018
复制相似问题