这可能是一个XY问题,所以我会从一开始就解释一下:
客户在其网站上有一个活动页面,可以在CMS中管理他的活动。 他需要能够选择事件的开始和结束日期,并且开始日期或结束日期也是如此。
有些活动持续了大约半年,所以我们先说6月6日到12月。这些事件必须显示在结果中,但由于它们运行了这么长时间,因此他不希望它们始终是您在事件页面上看到的第一个事件,因为事件页面按开始日期排序。这就是为什么他可以选择领先的日期。如果结束日期在此示例中处于领先状态,则在第一个月之后开始的其他事件必须在列表中显示比此事件更高的值,但是当开始日期超前时,如果事件不显示,则不应显示该事件。当前日期晚于6月,但必须在列表中显示高于具有较晚开始日期的事件或具有前导结束日期的事件。
这有意义吗?
这些是我目前的相关栏目
event_id (int)
event_name (varchar)
event_startdate (int, unix timestamp through PHP)
event_enddate (int, unix timestamp through PHP)
event_date_leading (int, 1 for enddate, 0 for startdate)
用简单的英语,我想我正在寻找这样的查询,但我无法将其翻译成MySQL:
select all events from events_table but dont show the events that have event_date_leading 0 and the startdate is in the past, then, place events that have event_date_leading 0 higher than events that have events_date_leading 1 while their event_startdate is actually earlier
我的查询中看起来需要某种双重排序,但我不知道是否可能。
我到目前为止所尝试的是检索所有事件,然后使用PHP检查它们的日期和主要值,并根据它不显示它们,但仍然不能让我按照我想要的方式排序到。
有人能指出我正确的方向吗?
答案 0 :(得分:0)
SELECT * FROM events_table WHERE event_startdate < NOW() AND event_date_loading=0 ORDER BY event_startdate ASC,event_date_leading DESC,event_startdate
这将选择startdate未来的所有事件,event_date_leading等于0.此外,它将首先在开始日期ASCending和Descending到order_date_leading中排序结果。
如果它不起作用,请设置一个sqlfiddle并使用您尝试过的示例代码向我们发送所需的结果。