pyrek
23.11.2005, 13:40:30
witam mam mały problem a mianowicie:
mam bazw i w niej takie tabele jak :
wojewodztwa
powiaty
gminy
miasta
i teraz robie wyszukiwarke która po wpisaniu słowa przeszuka mi te tabele i połączy wyniki. zrobiłem to tak ale wyświetla mi bzdury bo łączy miasta z województwami do których misto nie jest przydzielone :
<?php
$wynik = mysql_query ("SELECT * FROM wojewodztwa, powiaty, gminy, miasta WHERE nazwa_woj like '%$key%' or marszalek like '%$key%' or nazwa_pow like '%$key%' or starosta like '%$key%' or nazwa_gmi like '%$key%'or starosta_gmi like '%$key%'or nazwa_mia like '%$key%' or starosta_mia like '%$key%' or adres_mia like '%$key%' or adres_pow like '%$key%' or adres_woj like '%$key%' or adres_gmi like '%$key%' GROUP BY id_woj, id_pow, id_gmi, id_mia ORDER BY nazwa_woj, nazwa_pow, nazwa_gmi, nazwa_m
ia LIMIT $start,$limit_st ;")
?>
i nie mam pojęcia jak to rozwiązać
Aztech
23.11.2005, 13:54:42
Wyświetla bzury z bardzo prostego powodu, ponieważ nie łączysz odpowiednich danych za pomocą JOIN LEFT.
Zrobilbym to w ten sposób (nieoptymalny ale najprawdopodobniej bedzie działał).
Zakładam, że w tabeli miasta masz dowiazania za pomocą indeksów do tabeli województw powiatów i do marszałków.
Na początek rozbij swoje zapytanie na mniejsze części.
Sprawdz czy nazwa w $key istnieje w kazdej z tabel. Jeśli w kótejś znajdziesz, to jesteś w domu. Załóżmy że szukasz miasta, w jakiejś gminie $key (baza tego nie wie). Dowie się w momencie kiedy okaże się, że wynik zapytania do bazy gmin jest niezerowy. Wtedy łączysz za pomocą LEFT JOIN tabelę miast z tabelą gmin gdzie miasto.gmina_id = gmina.id i wtedy masz zwrócone wszyskie miasta w gminie.
Analogicznie robisz całą resztę.
Jeśli o to ci chodziło
pyrek
23.11.2005, 14:14:32
nie wiem czy dam sobie z tym rade jeszcze tego nie robiłem
mogę prosić o jakies przykładowe rozpisanie używając LEFT JOIN
SongoQ
23.11.2005, 14:57:06
SELECT *
FROM tab1 LEFT JOIN tab2 (tab1.id = tab2.tab1_id)
Gdzie tab2.tab1_id jest kluczem obcym tabeli tab1.id
pyrek
23.11.2005, 15:31:31
wiem że przeginam ale nie potrafie tego zrozumieć nie wiem jak to zmontowac jeśli znajdzie się jakaś dobra dusza która mi pomoże będe wdzięczny.
oot struktura tabel :
wojewodztwa
`id_woj` int(11) NOT NULL auto_increment,
`nazwa_woj` varchar(120) NOT NULL default '',
`marszalek` varchar(150) NOT NULL default '',
`urzad_woj` text NOT NULL,
`adres_woj` text NOT NULL,
powiaty
`id_pow` int(11) NOT NULL auto_increment,
`nazwa_pow` varchar(120) NOT NULL default '',
`id_woje` int(11) NOT NULL default '0', - id województwa
`starosta` varchar(150) NOT NULL default '',
gminy
`id_gmi` int(11) NOT NULL auto_increment,
`nazwa_gmi` varchar(120) NOT NULL default '',
`id_pow_gmi` int(20) NOT NULL default '0', id powiatu
`starosta_gmi` varchar(150) NOT NULL default '',
`urzad_gmi` text NOT NULL,
miasta
`id_mia` int(11) NOT NULL auto_increment,
`nazwa_mia` varchar(120) NOT NULL default '',
`id_pow_mia` int(20) NOT NULL default '0', - id gminy
`starosta_mia` varchar(150) NOT NULL default '',
podałem tylko pola które będe przeszukiwał po $key
Bardzo proszę o pomoc.
Aztech
23.11.2005, 15:40:32
Przypuszczam, że słowo które wyszukujesz pochodzi z jakiegoś formularza, albo wyszukiwarki. Nie można tam od razu ustalić jaki jest "rodzaj" poszukiwanego słowa, tzn czy dany wyraz jest miastem, powiatem, starostą itp itd? Bo po sposobie konstrukcji twojej bazy widzę, że generalnei trzeb będzie napisać trochę kodu
A tak przy okazji, po co ci aż 150 (120) miejsc na nazwę powiadu oraz na marszałka. Gdyby się ktoś nazywał: Eugeniusz Grzegorz Wawrzecki-Koniecpolski to i tak max to 50, naprawdę max!
Napisz dokładnie co chcesz mieć jako wynik poszukiwania! Bo znalezienie czegoś i połączenie z czyms niewiele mówi. Tutaj można na bardzo wiele sposobów łączyć wyniki
pyrek
23.11.2005, 16:01:41
w formularzu wyszukiwarki wpisuje słowo i może to być naza województwa, powiatu, gminy, miasta lub imie nazwisko marszałka, starosty , starosty gminy itd. więc nie da się ustalić z góry co to za słowo czy nazwa miasta czy województwa z tąd mam ten problem
Aztech
23.11.2005, 16:22:08
Ale możesz ustawić radiobutton o opcjach: miasto, miasto wojewódzkie, marszałek itp, które Ci tą informację da. Pamiętaj, najprostsze rozwiązania są najskuteczniejsze.
pyrek
23.11.2005, 16:30:51
tak wiem na początku miałem taką opcje ale z przyczyn wyższych musiałem z tego zrezygnować
Aztech
23.11.2005, 19:59:39
To wyjaśnij mi czy dobrze rozumiem. Jesli Twój $key to:
a) nazwa województwa to ma wyświetlić miasta należące do tego województwa, powiaty należące do niego tak? analogicznie jesli jest to adres lub marszałek?

jeśli to nazwa powaitu to ma wyśiwetlić do jakiego województwa należy i jakie są w nim gminy i miasta tak? analogicznie dla wojewody?
c) jeśli jest to gmina to ma wyswietlić informację do jakiego województwa należy do jakiego powiatu i jakie są w nim miasta? analogicznie dla starosty?
d) analogicznie miasto: do jakiej gminy, powiatu województwa? amnalogicznie dla starosty?
Bo czegoś tu zaczynam nie rozumieć?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.