我有 2 个数据库表,Events
和 Event_Dates
,因此每个事件可以有多个日期。我现在尝试读出下一个即将发生的事件以及按日期排序的所有即将发生的事件的列表。
因此,我使用子查询创建了以下查询,但排序依据被忽略。经过一些研究,我意识到这是常见的,但我仍然不确定如何解决这个问题。有人可以给我提示吗?
我的事件
表存储事件信息,如位置
、事件名称
和描述
。 Event_Dates
表存储 event_id
以及一个或多个日期(如果事件持续超过 1 天)。我
如果我只是检查我的子查询,那么我会得到 event_date 的正确顺序,但主查询会忽略 event_dates 的顺序。因此,如果我的事件日期表中有以下内容
id | event_id | event_date
1 | 58 | 2019-02-23
2 | 59 | 2019-02-24
3 | 60 | 2019-02-09
子查询返回 60
、58
、59
这是正确的,所以我想按该顺序显示事件,但相反显示 58
、59
、60
。
Select * FROM events WHERE id in(
select event_id from event_dates
where event_date >= NOW() order by ABS(DATEDIFF(NOW(),event_date))
)
更新-
出色而快速的帮助让我找到了解决方案,这就是它在 Laravel 中的样子:
$events = Event::select('events.*')
->distinct('events.id')
->join('event_dates','event_dates.event_id','=','events.id')
->where('event_date', '>=', \DB::raw('curdate()'))
->where('published',1)
->orderBy('event_dates.event_date')
->get();
最佳答案
您有重复发生的事件。一个事件可以在过去发生多次,也可以在将来发生多次。您想要显示按日期排序的 future 事件。这只是一个内部联接:
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
关于mysql - 如何按子查询结果排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54601724/