Как мне orderBy
дата в laravel / mysql, только если current date
находится в пределах / между starts_at
и ends_at
датами?
Например:
// Suppose Current Date: 2018-10-05
- Example A
= Starts At: NULL, Ends At: NULL, Created At: 2018-10-05
- Example B
= Starts At: NULL, Ends At: NULL, Created At: 2018-10-04
- Example C
= Starts At: 2018-10-01, Ends At: 2018-10-03, Created At: 2018-10-03
- Example D
= Starts At: 2018-10-03, Ends At: 2018-10-05, Created At: 2018-10-02
- Example E
= Starts At: 2018-10-05, Ends At: 2018-10-07, Created At: 2018-10-01
- Example F
= Starts At: 2018-10-07, Ends At: 2018-10-09, Created At: 2018-09-30
Мой текущий запрос (столбцы starts_at
и ends_at
):
Example::orderByRaw('if(isnull(starts_at) >= curdate() and isnull(ends_at) <= curdate(), starts_at, created_at) desc');
В результате:
- Example A
- Example B
- Example C
- Example D
- Example E
- Example F
Ожидаемый результат:
- Example E // First because of starts at 2018-10-05 until 2018-10-07
- Example A --
- Example B |_ // Same order based expired/null
- Example C |
- Example D --
- Example F // Still last because starts at is in the future
Вот мой sqlfiddle .