如何按子查询结果排序

时间:2019-02-08 23:42:34

标签: mysql sql mariadb

我有2个数据库表EventsEvent_Dates,因此每个事件可以有多个日期。现在,我尝试读取下一个即将发生的事件以及按日期排序的所有即将发生的事件的列表。

因此,我创建了带有子查询的以下查询,但是顺序by被忽略。经过研究,我意识到这很普遍,但是我仍然不确定如何解决这个问题。有人可以给我提示吗?

我的Event表存储事件信息,例如LocationEvent nameDescription。如果事件超过1天,则Event_Dates表存储event_id和一个或多个日期。我

f我只检查了子查询,然后在event_date之前得到了正确的顺序,但是Main Query在event_dates之前忽略了该顺序。因此,如果我在活动日期表中包含以下内容

id | event_id | event_date
1  | 58 | 2019-02-23
2  | 59 | 2019-02-24
3  | 60 | 2019-02-09 

子查询返回正确的605859,因此我想按该顺序显示事件,但显示58,{{ 1}},59

60

更新-

强大而快速的帮助为我提供了解决方案,这就是Laravel中的外观:

Select * FROM events WHERE id in(
 select event_id from event_dates 
    where event_date >= NOW() order by ABS(DATEDIFF(NOW(),event_date))
)

2 个答案:

答案 0 :(得分:1)

在我看来,您只需要在两个表之间使用JOIN,并对其进行正确过滤和排序即可:

SELECT e.*, d.*
FROM events e
INNER JOIN event_dates d ON d.event_id = e.event_id AND d.event_date >= NOW()
ORDER BY d.event_date

答案 1 :(得分:1)

您有重复发生的事件。一个事件过去可能已经发生了多个时间,将来也可能发生了多个时间。您想显示按事件日期排序的将来事件。那仅仅是内在的联系:

select e.*
from events e 
join event_dates ed on ed.event_id = e.id and ed.event_date >= now()
order by ed.event_date;

通过2017、2018、2019、2020年的圣诞节和复活节活动,您将获得:

Easter
Christmas
Easter
Christmas