Witam,
tworzę projekt aplikacji mobilnej pozwalającej sprawdzić odjazdy z danego przystanku, na którym stoi użytkownik. Mam problem z utworzeniem zapytania, które by zwróciło dane w następującej postaci:

Numer linii | Kierunek | Godzina
(linia.nr_linii ) | (linia.nazwa) | (rozklad.godzina)

Mam 3 tabele:

Przechowującą informacje na temat przystanku (jeden przystanek składa się z conajmniej dwóch słupków przystankowych, jeden dla odjazdów w jednym kierunku, a drugi dla odjazdów w przeciwnym kierunku):

PRZYSTANEK
nr_slupka - numer słupka przystankowego
nazwa - nazwa przystanku
ulica - ulica, na której znajduje się przystanek
dlugosc - współrzędne słupka przystankowego
szerokosc - współrzędne słupka przystankowego

Sparsowane informacje z plików .xml dostarczonych przez przewoźnika dotyczące informacji o odjazdach z danego przystanku:

ROZKLAD
nr_slupka - numer słupka przystankowego
nr_linii - numer linii
wariant - wariant (integer) liczba 1..x określająca kierunek jazdy (np. wariant 1 - Leśnica-Biskupin, wariant 2 - Biskupin - Leśnica, wariant 3 - zajezdnia Borek - Leśnica itp.)
dzien - dzień ( dzień roboczy, sobota lub niedziela)
godzina - godzina (HH:MM) danego odjazdu

Zawierającą numery linii oraz wszystkich możliwych kierunków jazdy:

LINIA
nr_linii - numer linii
wariant - wariant w wersji liczbowej
nazwa - nazwa wariantu (tak jak podałem wyżej w przykładzie)

Wariant nie jest unikalną wartością, jednak jeśli trzeba będzie to mogę przeprogramować parser rozkładu jazdy.

Aplikacja mobilna przesyła do skryptu php współrzędne geograficzne, który na jej podstawie określa numer słupka przystankowego, co pozwoli zidentyfikować gdzie stoi użytkownik.

Mam nie małą zagwozdkę jak otrzymać w wyniku listę wszystkich najbliższych odjazdów danej linii z danego przystanku tak, żeby była w postaci podanej powyżej.
Dzień można wyznaczyć za pomocą funkcji dayofweek(now())
Czas najbliższych odjazdów dostaniemy dzięki

select godzina
from rozklad
where time(godzina)>time(now())
ORDER BY godzina ASC
limit 1

Natomiast nie wiem całkowicie co dalej. Nie wiem czy jest jakaś możliwość osiągnięcia postawionego przeze mnie celu przy takiej budowie bazy. Wiem, że jest tu chaos, ale jest to odzwierciedlenie 1:1 danych od przewoźnika.

Jeśli ktoś ma jakieś wskazówki (dotyczące zapytania, bądź przeprojektowania bazy) jak to można rozwiązać to z góry bardzo dziękuję.



W sumie okazało się, że wcale nie jest takie ciężkie:

CODE

SELECT
DISTINCT linia.nr_linii, linia.nazwa, rozklad.godzina
from linia, rozklad
where rozklad.nr_slupka=$numer
and linia.nr_linii=rozklad.nr_linii
and linia.wariant=rozklad.wariant
and time(rozklad.godzina)>time(now())
GROUP BY linia.nr_linii
ORDER BY time(rozklad.godzina) ASC


Póki co testy pokazały, że dobre wyniki wychodzą.
Pozdrawiam