0

这可能是XY问题,所以我将尝试从头开始解释:

客户在他的网站上有一个活动页面,可以在 CMS 中管理他的活动。他需要能够选择活动的开始日期和结束日期,以及开始日期或结束日期是否领先。

有些活动会持续半年左右,所以让我们说六月一号到十二月一号。这些事件必须显示在结果中,但由于它们运行时间如此之长,他不希望它们始终是您在事件页面上看到的第一个事件,因为事件页面按开始日期排序。这就是为什么他可以选择领先的日期。如果在此示例中结束日期领先,则在 6 月 1 日之后开始的其他事件必须在列表中显示在高于此事件的位置,但是当开始日期领先时,如果当前日期晚于 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 检查它们的日期和前导值,并据此显示/不显示它们,但这仍然不能让我按照我想要的方式进行排序。

谁能指出我正确的方向?

4

1 回答 1

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

这将选择开始日期在未来并且 event_date_leading 等于 0 的所有事件。它还将首先将结果排序为开始日期 ASCending 和降序到 event_date_leading。

如果它不起作用,请设置一个 sqlfiddle 并向我们发送您尝试过的示例代码所需的结果。

于 2013-11-15T11:27:05.863 回答