![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 18.11.2012 Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 19:38 |