![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) ![]() ![]() |
Cześć,
mam pewien problem. Otóż zaprojektowałem sobie tak tablicę (wydawało mi się że tak najlepiej): Cytat BusWay: ID Name City: ID Name CityToBusWay ID_BusWay ID_City jak zrobić zapytanie które wyświetli tylko te połączenia BusWay w których będą dwie przeze mnie podane miejscowości. Np. Chcę jechać Radomia do Warszawy. Zrobiłem sobie coś takiego:
Jednak to wyświetla wszystkie wpisy które zawierają w połączeniu jedno z tych miast, jak zrobić aby wyświetlało tylko te gdzie są podane oba miasta? -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) ![]() ![]() |
ogolnie musisz zrobic podzapytanie z GROUP BY i HAVING COUNT(*)=2 (czyli maja wystapic te dwa bustopy)
-------------------- śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu.. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) ![]() ![]() |
Jednak dalej mam problem, otóż zapomniałem że Radom->Warszawa to nie to samo co Warszawa->Radom także muszę dodać jeszcze jakiś warunek do tabeli CityToBusWay dodać pole ID (autonumerowanie) tak aby sprawdzić czy Radom ma mniejsze ID od ID Warszawy i jeśli tak to wyświetli to połączenie - da się coś takiego wykombinować?
![]() -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
A ja nie rozumiem co ma zawierać tabelka BusWay.
Dlaczego nie tak: Kod city cityId | name bus_way bysWayId | from | to ? Tak btw. nazwa miasta nie jest dobrym identyfikatorem bo jest wiele miast o nazwie np. Psary czy jakieś tam inne. Powinno być pole z kodem pocztowym i on powinien być wykorzystywany w zapytaniach. -------------------- Moja gra - scraby.io
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) ![]() ![]() |
No tak, tylko że to to mniejszy problem
![]() Załóżmy że jadę z Zakopanego do Warszawy: - Zakopane - Kraków - Kielce - Radom - Warszawa jeśli szukam połączenia z Radomia do Kielc to powyższe zapytanie też mi to wyświetli a nie powinno bo Kielce są przed Radomiem (w tym połączeniu) a autobus nie zawróci ![]() -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Ale przecież Zakopane -> Warszawa to zupełnie inna trasa niż Warszawa -> Zakopane, inny numer trasy...
Ja bym zrobił taką bazę: Kod city
cityId | name way (tabelka może być pomocna) wayId | from | to // czyli przystanek pierwszy i ostatni route routeId | routeNumber stop stopId | routeId | stopNumber | cityId Ten post edytował #luq 14.09.2010, 07:35:53 -------------------- Moja gra - scraby.io
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) ![]() ![]() |
A mógłbyś opisać trochę tabelę route i stop?
![]() routeId - autonumerowanie? routeNumber - ilość przystanków? stopId - autonumerowanie? routreId - route.routeId? stopNumber?? cityId - city.cityId? w tabeli way from i to to mają być cityId czy całe nazwy? ![]() Ten post edytował pionas 15.09.2010, 08:57:01 -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Route - trasa
Stop - przystanek routeId - autonumerowanie? Tak, wszystkie pola xxxId są autoincrement. Cytat routeNumber - ilość przystanków? Nie, to numer trasy. Cytat stopId - autonumerowanie? Tak, zresztą o tym wyżej wspomniałem. Cytat routreId - route.routeId? Nie rozumiem o co Ci chodzi tutaj... Cytat stopNumber?? Numer przystanku, dzięki temu wiemy, że autobus jedzie kolejno np. Katowice -> Kraków -> Łódź -> Warszawa, Cytat w tabeli way from i to to mają być cityId czy całe nazwy? ![]() Oczywiście, że cityId -------------------- Moja gra - scraby.io
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem to trochę inaczej:
Cytat BusWay: ID Name // np. Połączenie Zakopane - Kraków City: ID Name CityToBusWay ID ID_BusWay ID_CityStart // z jakiej miejscowosci ID_CityEnd // do jakiej miejscowosci I teraz mam taki problem. Jak zrobić aby wyświetliło mi takie info: Połączenie z A do D przez B, C. SELECT Name FROM BusWay - wyświetli mi nazwę połączenia SELECT Name FROM city WHERE ID IN (SELECT ID_CityStart FROM CityToBusWay WHERE ID_BusWay=4 GROUP BY ID_CityStart) OR ID IN (SELECT ID_CityEnd FROM CityToBusWay WHERE ID_BusWay=4 GROUP BY ID_CityEnd) - wyświetli mi nazwy miejscowości z połączenia o ID=4 Da się to połączyć w jedno zapytanie? Albo jak inaczej zaprojektować bazę aby wyświetlić informację o połączeniu tzn. skąd dokąd i przez co jest ![]() -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Jakbyś zaprojektował bazę zgodnie z tym co napisałem to byś miał prosto
Dostajesz wszystkie przystanki trasy o id = x, a więc pierwszy to Twoje A, ostatni D, a reszta to przystanki pośrednie. PS. w podanej przeze mnie tabelce way powinno być jeszcze pole routeId Ten post edytował #luq 25.09.2010, 14:51:40 -------------------- Moja gra - scraby.io
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem coś takiego:
select ID_BusWay, group_concat(distinct ID_CityStart separator ',') as route from CityToBusWay group by ID_BusWay Wyświetla mi ID całej trasy i przystanki od A do C (bez ostatniego) tylko jak zamienić ID miejscowości na ich nazwy? ![]() #luq jakbym przerobił na Twoje tablice to jakby wyglądał przykład? city cityId | name 1 | Radom 2 | Kozienice 3 | Warszawa 4 | Wrocław 5 | Zakopane 6 | Kraków 7 | Kielce way (tabelka może być pomocna) wayId | routeID | from | to // czyli przystanek pierwszy i ostatni route routeId | routeNumber stop stopId | routeId | stopNumber | cityId stopNumber to musiałbym ręcznie wprowadzać? -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 285 Pomógł: 37 Dołączył: 18.12.2007 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Ogólnie rzecz biorąc pogubiłem się trochę w waszym dialogu, natomiast rozwiązaniem problemu z pierwszego postu jest chyba (nie chciało mi się przetestować) zapytanie poniżej:
I tutaj jeszcze mała uwaga, zapytanie nie jest odporne na to czy chcesz pojechać z Radomia do Warszawy czy odwrotnie, bo to chyba będą dwie osobne trasy w twojej bazie, ale możesz to uwzględnić dodając do CityToBusWay kolumnę np. StopOrder (int) i na końcu zapytania dokleić
Ilość miast możesz zwiększyć kopiując jeden z czteroliniowych ciągów związanych z miastem, zmienić numer na kolejny i nazwę miasta na poszukiwaną. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 25.03.2009 Skąd: Pionki Ostrzeżenie: (0%) ![]() ![]() |
netmare chyba nie za bardzo.
Chodzi o to że w formularzu podaję skąd dokąd i przez co (niekoniecznie) tworzę połączenie i potem generuje mi się lista wszystkich możliwych połączeń i tam ustalam datę, godzinę i cenę i potem to zapisuję w tablicy CityToBusWay. Tak to wygląda: ![]() Problem tkwi w tym że nie wiem czy wyświetlać wszystkie możliwe kombinacje (Połączenie A-D, A-B, A-C, B-C, B-D, C-D) czy po prostu napisać że jest to połączenie z Punktu A do Punktu D przez Punkty B i C Osobiście bym wolał to drugie rozwiązanie tylko nie wiem jak zaprojektować bazę aby coś takiego otrzymać (projekt bazuje na mysql+java) Mógłbym dodać do CityToBusWay dodatkowe pole (step) w którym bym zapisywał który to krok połączenia i całość zrobić na dwóch zapytaniach: 1. pobranie wszystkich połączeń (SELECT * FROM BusWay) 2. pobranie miejscowości pośrednich (SELECT b.Name FROM CityToBusWay a, City b WHERE a.ID_BusWay={x} AND a.step>1 and a.ID_CityStart=b.ID GROUP BY a.ID_CityStart ORDER BY a.ID ASC) No chyba że ktoś ma lepszy pomysł? ![]() [EDIT] Zrobiłem to w jednym zapytaniu: SELECT c.*, GROUP_CONCAT(DISTINCT b.Name ORDER BY a.ID separator ', ') FROM CityToBusWay a, City b, BusWay c WHERE c.id=a.ID_BusWay AND a.step>1 and a.ID_CityStart=b.ID GROUP BY c.Name ORDER BY a.ID ASC) Jednak z moim ostatnim zapytaniem jest problem:
Nie wyświetla połączeń bez miejscowości pośrednich. Jak usunę a.step>1 to wyświetla wszystkie z tymże na początku jest miejscowość z której wyjeżdżamy, da się to obejść substringiem ale czy jest możliwość poprawienie zapytania by uzyskać taki efekt? Ten post edytował pionas 26.09.2010, 08:13:39 -------------------- Organizujesz konkurs? Chcesz coś wygrać? Wejdź na www.e-Konkursy.info :)
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 02:02 |