这可能是一个XY问题,因此我将从一开始就尝试进行解释:
客户在其网站上有一个事件页面,可以在CMS中管理他的事件。
他需要能够选择活动的开始日期和结束日期,以及开始日期或结束日期是否领先。
有些活动大约持续半年,所以可以说6月1日至12月1日。这些事件必须显示在结果中,但是由于它们运行了很长时间,因此他不希望它们始终是您在事件页面上看到的第一个事件,因为事件页面按开始日期排序。这就是为什么他可以选择什么日期。如果在此示例中结束日期领先,则在6月之后开始的其他事件在列表中的显示必须比此事件要高,但是当开始日期提前时,如果当前日期晚于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检查它们的日期和前导值,然后根据该结果进行显示/不显示,但是这仍然无法按我的意愿进行排序。
谁能指出我正确的方向?
最佳答案
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_lead等于0的所有事件。还将首先在开始日期ASCending和Descending到event_date_ Lead中对结果进行排序。
如果它不起作用,请设置一个sqlfiddle并通过您尝试的示例代码向我们发送所需的结果。
关于php - 根据其他列的值在mysql中排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19999812/