У меня есть 2 таблицы БД, Events
и Event_Dates
, поэтому каждое событие может иметь несколько дат.Сейчас я пытаюсь зачитать следующее предстоящее событие и список всех предстоящих событий, упорядоченных по дате.
Итак, я создал следующий запрос с подзапросом, но порядок по нему игнорируется.После некоторого исследования я понял, что это распространено, но я все еще не уверен, как обойти это.Может ли кто-нибудь дать мне подсказку?
Моя Event
Таблица содержит информацию о событиях, такую как Location
, Event name
и Description
.В таблице Event_Dates
хранятся даты event_id
и одна или несколько дат, если событие продолжается более 1 дня.I
f Я просто проверяю свой подзапрос, затем получаю правильный порядок по 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();