Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] stworzenie zapytania SELECT, phpMyAdmin
pawelt
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ixpack
post
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ć (IMG:style_emoticons/default/wink.gif)

trasa bezp:
  1. SELECT `alias1`.`miasto` AS `start_from`, `alias2`.`miasto` AS `end_at` FROM `trasy` LEFT JOIN `miasta` AS `alias1` ON `trasy`.`start`=`alias1`.`id_miasta` LEFT JOIN `miasta` AS `alias2` ON `trasy`.`stop`=`alias2`.`id_miasta` WHERE `id_trasy` = '1';


1 sposób z miastem przechodnim:
  1. SELECT `alias1`.`miasto` AS `start_from`, `alias2`.`miasto` AS `end_at`, (SELECT `miasto` FROM `przez` LEFT JOIN `miasta` ON `przez`.`przez`=`miasta`.`id_miasta` WHERE `id_trasy` = '1') FROM `trasy` LEFT JOIN `miasta` AS `alias1` ON `trasy`.`start`=`alias1`.`id_miasta` LEFT JOIN `miasta` AS `alias2` ON `trasy`.`stop`=`alias2`.`id_miasta` WHERE `id_trasy` = '1';


2 sposób z miastem przechodnim
  1. SELECT `alias1`.`miasto` AS `start_from`, `alias2`.`miasto` AS `end_at`, `alias3`.`miasto` AS `checkpoint` FROM `przez` LEFT JOIN `miasta` AS `alias3` ON `przez`.`przez`=`alias3`.`id_miasta`, `trasy` LEFT JOIN `miasta` AS `alias1` ON `trasy`.`start`=`alias1`.`id_miasta` LEFT JOIN `miasta` AS `alias2` ON `trasy`.`stop`=`alias2`.`id_miasta` WHERE `trasy`.`id_trasy` = '1' AND `przez`.`id_trasy` = '1';


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" (IMG:style_emoticons/default/wink.gif)

Ten post edytował ixpack 10.11.2011, 16:59:19
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 04:09