MySQL的。混合查询并仅显示一次结果

时间:2014-08-04 09:40:31

标签: mysql

我的网站发布了我镇(意大利)发生的事件(音乐,戏剧,展览......)。所有活动都有开始日期和结束日期。 (仅持续一天的活动将具有相同的日期)。

所有事件都可能显示如下:

SELECT * FROM events WHERE end_date >= '".date("Y-m-d")."' ORDER BY end_date

上述声明将正确列出从今天开始的所有当前事件。

但是有一些事件可能会在未来的某个时间点发生,并持续一天(从 - 到事件),例如:

  

start_date = 2014-08-12 and end_date = 2014-08-23

具有上述日期的事件将在最后列出,因为MySQL查询说:

  

ORDER BY end_date

可以查询MySQL,以便它列出所有当前事件以及所有那些“从 - 到”事件,这些事件在其日期范围内的日期等于今天ONLY ONCE?

例如,假设今天= 2014-08-06 ,并且有很多事件发生在同一天:

Event 1: start_date=2014-08-06 / end_date=2014-08-06
Event 2: start_date=2014-08-07 / end_date=2014-08-07
Event 3: start_date=2014-08-08 / end_date=2014-08-08
Event 4: start_date=2014-08-09 / end_date=2014-08-09

还有另一个具有以下日期范围的事件:

Event 5: start_date=2014-08-01 / end_date=2014-08-20

日期包括事件1-4的日期

预期结果应为:

活动5 - 活动1 - 活动2 - 活动3 - 活动4

事件5 列在第一个位置,因为它的日期范围包含事件1 的相同日期, strong>必须仅列出 ONCE ,以避免每次发生所有其他事件(2-4)时重复。

必须避免这种情况:活动5 - 活动1 - 活动5 - 活动2 - 活动5 - 活动3 - 活动5 - 活动1 - 活动5

2 个答案:

答案 0 :(得分:0)

  

SELECT * FROM events WHERE end_date> ='“。date(”Y-m-d“)。”'ORDER BY end_date

     

上述声明将正确列出从今天开始的所有当前事件。

没有。这将返回从今天开始的所有活动。其中一些开始于过去。

答案 1 :(得分:0)

可能会有效。

SELECT * FROM events WHERE "date("%Y-%m-%d")"  BETWEEN start_date AND end_date