Problem z zapytaniem

Witam ma problem takiego rodzaju:

mam dwie tabele:

Miejscowości
-id_miejsca
-nazwa_miejsca

  • nr_ miejscaNaTrasie
    -Godzina_odjazdu

Kursy
-id_kursu
-nazwa_Trasy
-Dni_kursu
-Dystans
-CzasPrzebycia

te dwie są ze sobą ze sobą połączone trzecią(Relacja wiele do wielu)
*Każda trasa może mieć wiele przystanków(Tab Miejscowości)
*Każdy przystanek może leżeć na wielu trasach

3 tabela
Id_trasy
Id_kursu

Potrzebuję napisać zapytanie sql które po wpisaniu nazwy miejscowości początkowej i końcowej
wyświetli mi:
| Id_trasy | nazwę trasy | nazwę przystanku pocz| godzinę odjadu |

Pisane na szybko, idea chyba ok:

Miejscowosci.find_by_nazwa_miejsca("miejscowosc_poczatkowa").kursy.find(:first, :include => :miejscowosci, :conditions => ['miejscowosci.nazwa_miejsca = ?', "miejscowosc_koncowa"])

Dobra, zaspany byłem - idea jednak nie jest ok. Dopiero teraz dotarło do mnie, że kilka przystanków może dzielić miasta, czyli mamy do czynienia ze zwykłym grafem (nie?)skierowanym ;).

Do znalezienia najkrótszej ścieżki łączącej dwa miasta służy algorytm BFS (inaczej przeszukiwanie wszerz). Jest on bardzo prosty do zaimplementowania (kilka linii kodu), ale w gołym sqlu tego raczej nie zrobisz.