【问题标题】:Show individual dates unless they're consecutive dates显示单个日期,除非它们是连续日期
【发布时间】:2023-03-07 21:31:01
【问题描述】:

我正在开发一个显示事件列表的应用程序。最初,该应用程序使用 Drupal 并将事件显示为“范围”。因此,如果 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

我正在对这两个表进行内部联接以生成事件列表。在该输出循环中,我再次查询并获取单个 EventDates 并生成范围

SELECT MAX(EventDate) AS maxDate, MIN(EventDate) AS minDate
FROM tblEventDates
WHERE EventID = '$EventID'

我只是不确定确定是否显示范围的这一部分或孤立日期的最佳方法是什么。

有什么建议吗?

【问题讨论】:

  • 这在客户端代码中做得更好。 SQL 更适合数据检索,而不是数据格式化。
  • 我认为最好的解决方案是在循环中通过 PHP 处理这个问题(参见第二个查询)
  • 这可以通过 PHP 使用 DateTimeDateInterval.... 轻松完成。当然,您必须根据它们在数据库中的存储方式来构建不同的日期。我相信默认的 DATETIME 是一个“YYYY-MM-DD”字符串,一个简单的explode 应该可以解决问题
  • 使用此代码解决:stackoverflow.com/questions/8461543/…

标签: php mysql sql date


【解决方案1】:

我不完全理解您为什么不只是在原始查询中获得范围:

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

【讨论】:

  • 我有混合日期和范围。这是我想要实现的输出。“所以如果我们有事件 3/4、3/6、3/8 和 3/10、3/11、3/12 - 我们需要看到以下 3 /4、3/6、3/8、3/10-3/12"
  • @hanji 。 . .你能编辑你的问题,提供样本数据和想要的结果吗?
  • 所以如果我们有事件 3/4、3/6、3/8 和 3/10、3/11、3/12 - 我们需要看到以下 3/4、3/ 6、3/8、3/10-3/12 我需要混合日期项目和范围。我认为 PHP 是解决这个问题的方法。我刚刚在 MySQL 中完成.. 但解决方案将是一个获取日期数组的函数。
  • @hanji 。 . .这不是问题中的代码所做的。
  • 呃……是的。无论如何..我在这里找到了解决方案:stackoverflow.com/questions/8461543/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
相关资源
最近更新 更多