У мене є ця проблема, я думаю, ви можете мені допомогти.
PS Я не впевнений, як це назвати, тому, якщо хтось знайде більш відповідну назву, будь ласка, відредагуйте.
Фон
- Я роблю цю програму для пошуку автобусних маршрутів.
- Автобусні лінії - це трицифрове число і є унікальним і ніколи не зміниться.
- Вимога полягає в тому, щоб мати можливість шукати лінії від зупинки A до зупинки B.
- Користувальний інтерфейс вже успішно натякає користувачеві використовувати лише дійсні імена зупинки.
- Вимога полягає в тому, щоб мати змогу відображати, якщо маршрут має пряму лінію, а якщо ні - відображати 2-лінію та навіть 3-лінійну комбінацію.
Приклад:
Мені потрібно пройти з точки А до точки D. Програма повинна показувати:
- Якщо є пряма лінія AD.
- Якщо ні, виведіть альтернативні дворядкові комбінації, такі як змінна, компакт-диск.
- Якщо немає 2-рядкових комбо, знайдіть 3-рядкові комбінації: AB, BC, CD.
Звичайно, додаток має відображати номери автобусних ліній, а також коли перемикати автобуси.
Що я маю:
Моя база даних структурована наступним чином (спрощена, фактична база даних включає в себе місцеположення та час, і багато чого іншого):
+-----------+
| bus_stops |
+----+------+
| id | name |
+----+------+
+-------------------------------+
| lines_stops_relationship |
+-------------+---------+-------+
| bus_line | stop_id | order |
+-------------+---------+-------+
Де lines_stops_relationship
описуємо багато-багато-багато зв’язок між автобусними лініями та зупинками.
Порядок, означає порядок, у якому зупинки відображаються в одному рядку. Не всі рядки йдуть вперед і назад, і порядок має значення (точка А з порядком 2 настає після точки Б із порядком 1).
Проблема
- Ми з'ясовуємо, чи може лінія пройти через маршрут досить легко. Просто шукайте один рядок, який проходить через обидві точки у правильному порядку.
- Як я можу знайти, якщо є комбінація 2/3 рядків? Я думав шукати лінію, яка відповідає зупинці джерела, та одну для зупинки пункту призначення, і бачити, чи можу я отримати загальну зупинку між ними, де користувач може перемикати автобуси. Як я запам’ятав цю зупинку?
- Комбо з 3 рядків ще складніше, я знаходжу рядок для джерела та рядок для пункту призначення, а далі що? Шукайте лінію, яка має 2 зупинки, я думаю, але знову: Як я запам’ятав зупинки?
тл; д-р
Як запам’ятати результати запиту, щоб мати можливість його знову використовувати? Я сподіваюся досягти цього в одному запиті (для кожного - запит для 1-рядкових маршрутів, запит для 2 та запит для 3-рядкових комбо).
Зауважте: я не заперечую, якщо хтось пропонує зовсім інший підхід, ніж у мене, я відкритий для будь-яких рішень.
Буде нагороджено будь-яку допомогу файлом cookie та нагородою. Спасибі заздалегідь!