problem z zapytaniem

0

Witam, mam problem z zapytaniem które będzie wyszukiwało liczbę przesiadek.
Mam np dostać sie z punktu 1 do punktu 8 jednak nie ma tam bezpośredniego połączenia i trzeba się przesiąść w punkcie 2, 5 i 6. Jak zabrać się za takie zapytanie?

link do schematu
https://zapodaj.net/ad327310306f3.jpg.html

0

A jakie masz tabele?

0

Mam tabele tras gdzie do trasy np 1-3 w której są wszystkie przystanki na danej trasie, jak np 2 i kolejność w jakiej występują. Przystanki w tabeli trasy to id z tabeli przystanki. Jeżeli jeden przystanek należy do kilku tras, to wydaje mi się że trzeba wyszukiwać tych punktów przecięcia. Dla 1 przesiadki nie mam problemu z zapytaniem, jednak nie wiem jak się za to zabrać jeżeli nie wiem ile przesiadek wystąpi miedzy punktem A i B. Nie oczekuje gotowego rozwiązania tylko spopsbu jak to zrobić.

0

Wydaje mi się, że powinno dać się zrobić zwykłym zapytaniem hierarchicznym.

W Oracle mogłoby to wyglądać tak: http://sqlfiddle.com/#!4/81363/10

Idea jest następująca:

  1. Połączenia reprezentujemy jako graf: (przystanek z którego jedziemy, przystanek sąsiedni, numer trasy). Jeśli z przystanku 1 do 2 możemy dojechać np. liniami A,B,C to mamy w tabelce 3 wpisy.
  2. Robimy zapytanie hierarchiczne (NOCYCLE w zapytaniu mówi Oraclowi, że w razie znalezienia cyklu ma kontynuować pracę, a nie wywalać się radośnie z komunikatem o znalezieniu cyklu)
  • startujemy z wybranego przystanku
  • zapamiętujemy przystanki pośrednie
  • zapamiętujemy numery tras
  1. Wybieramy tylko te trasy, które kończą się na żądanym przystanku końcowym

Pozostaje rozbić ciąg "/A/A/A/B/C/D/E" na wiele wierszy i wyciągnąć liczbę unikalnych identyfikatorów tras. Od tego odejmujemy 1 (zakładam, że skoro podróż przechodzi przez N tras to optymalnie zrobiliśmy N-1 przesiadek) i gotowe...

Pozostaje przetestować i zobaczyć czy są dziury w takim podejściu ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1