![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 10.11.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam..
Mam problem ze stworzeniem zapytania SELECT (phpMyAdmin). Chodzi o to, że posiadam tabelę z miejscowościami: MIASTA id_miasta (PK) nazwa_miasta drugą tabelę z trasami: TRASY id_trasy (PK) start koniec oraz trzecią tabelę z miejscowościami pośrednimi na danej trasie: PRZEZ id_trasy (FK) miasto_posrednie W kolumnach "start" oraz "koniec" tabeli TRASY start=id_miasta oraz koniec=id_miasta. Analogicznie w kolumnie "miasto_posrednie" tabeli PRZEZ miasto_posrednie=id_miasta. Zależy mi na tym, aby miasta zawsze pobierać z jednej tabeli (MIASTA). I jak teraz wyświetlić tabelę z prawdziwymi nazwami miejscowości na danej trasie? Np. tak żeby otrzymać taki wynik: start: Łódź ____ koniec: Lublin ____ miasto_posrednie: Warszawa start: Łódź ____ koniec: Lublin ____ miasto_posrednie: Radom ____ miasto_posrednie: Puławy ... Albo chociaż żeby wyświetlić tylko dane z dwóch pierwszych tabel: nazwy miejscowości "start" i "koniec". Moje próby stworzenia takiego zapytania kończą się uzyskaniem nazwy tylko jednej miejscowości, a następną jest już numer id danego miasta. Jak zrozumiem ideę, to mam nadzieje, ze dalej sobie poradzę. Nie wiem, może źle zaprojektowałem bazę - jeśli ktoś byłby uprzejmy coś doradzić, będę wdzięczny. Pozdrawiam.. Ten post edytował pawelt 10.11.2011, 15:10:49 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 248 Pomógł: 55 Dołączył: 1.06.2010 Skąd: mam to wiedzieć? Ostrzeżenie: (0%) ![]() ![]() |
Tak na szybko:
moje tabele to: trasy (id_trasy, start, stop), miasta (id_miasta, miasto), przez(id_trasy, przez) - pozmieniaj nazwy i spróbuj zrozumieć ![]() trasa bezp:
1 sposób z miastem przechodnim:
2 sposób z miastem przechodnim
A teraz takie moje przemyślenie na świeżo... Jeżeli masz wszędzie to miasto pośrednie, czy nie lepiej wstawić to do tabeli tras? wtedy masz 3 kolumny w jednym miejscu. No chyba, że są trasy bezpośrednie... pozdr. Ps. jak zerkniesz na 2-gi sposób z miastem przechodnim, nasuwa się myśl, że można zrobić trasy "alternatywne" ![]() Ten post edytował ixpack 10.11.2011, 16:59:19 -------------------- Łatwo jest być odważnym za murami własnego zamku.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 10.11.2011 Ostrzeżenie: (0%) ![]() ![]() |
Super, wielkie dzięki za pomoc.
Dzięki tym przykładom dowiedziałem się, że można połączyć ze sobą kilka razy tą samą tabelę pod innym aliasem. Tabelę PRZEZ stworzyłem między innymi dlatego, że istnieją bezpośrednie połączenia w których nie ma miejscowości pośrednich (dlatego, że są zbyt małe, a przebieg trasy na tych odcinkach jest oczywisty). Zastanawia mnie jednak fakt czy taki układ tabel jest dobry, jeśli będzie kilka miejscowości pośrednich na danej trasie, czy może coś trzeba zmienić? Zależy mi na tym, żeby dobrze zbudować bazę, aby nie mieć problemów z tworzeniem zapytań w kodzie php. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 248 Pomógł: 55 Dołączył: 1.06.2010 Skąd: mam to wiedzieć? Ostrzeżenie: (0%) ![]() ![]() |
Wiesz, sam nie jestem ekspertem, ale zamiast wydzielać do osobnej tabeli dodałbym kolumnę "przez", gdzie np. 0 lub id startu oznaczałoby bezpośrednią trasę. Problemik pojawia się, gdy mamy więcej "miast przez" niż jedno. Wtedy nie możemy użyć tej kolumny, bo nie dodamy tam kilku id. Chyba, że będzie to np. varchar i dasz jakiś terminator pomiędzy id'kami i używając wyr. regularne podobnie podpinać nazwy etc. - robi się skomplikowane.
W tym momencie możesz dodać kilka miast przez i wydukać zapytanie, chyba będzie to optymalne - tzn. jak jest teraz. Pobaw się, zobacz... Tylko dla "przez" dodaj inny klucz główny, id_trasy może się przecież powtarzać. Wówczas baza zwróci wynik typu: start, stop, przez1 start, stop, przez2 start, stop, przez3 -------------------- Łatwo jest być odważnym za murami własnego zamku.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 23.06.2025 - 21:03 |