Как запросить, чтобы узнать время отправления и прибытия на 5-м уровне? - PullRequest
0 голосов
/ 25 сентября 2018

Я пытался найти часы отправления и прибытия автобусов

Моя база данных

id | bus_id | city | time
1  |1       |  1   | 05:00
2  |1       |  2   | 06:00
3  |1       |  3   | 07:00

пример пользователя выберите город происхождения = 1 и город назначения = 2

тогда ожидаемые результаты

bus | time departure | time arrival
1   | 05:00          | 06:00

мой запрос

$departures = Departure::whereBetween(
    'city', [
        $request->origin, $request->destination
    ])
->get();

1 Ответ

0 голосов
/ 25 сентября 2018

Если время конкретного автобуса, прибывающего в определенный город, составляет только одну запись, вы можете попробовать это, или оно вернет максимальное время прибытия и максимальное время отправления.

Это объединит две записи вместе (bus_1 до A и bus_1 до b) и выберите максимальное время в качестве времени прибытия или отправления:

$departure_citys = Departure::where('city',$request->origin)
                           ->selectRaw('id, 
                                        bus_id, 
                                        city,
                                        time AS time_departure, 
                                        NULL AS time_arrival');

$arrival_citys   = Departure::where('city',$request->destination)
                           ->selectRaw('id, 
                                        bus_id, 
                                        city,
                                        NULL AS time_departure, 
                                        time AS time_arrival');

$departures = $departure_citys->unionAll($arrival_citys);

DB::table(DB::raw("({$departures->toSql()}) AS tr"))
                              ->mergeBindings($departures->getQuery())
                              ->groupBy('city')
                              ->selectRaw('bus_id,
                                          MAX(time_departure) AS time_dept,
                                          MAX(time_arrival) AS time_arvl')->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...