Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z wyszukiwaniem w bazie
Forum PHP.pl > Forum > PHP
pyrek
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 :


  1. <?php
  2.  
  3. $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 ;"
    )
  4.  
  5. ?>


i nie mam pojęcia jak to rozwiązać
Aztech
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
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
  1. SELECT *
  2. FROM tab1 LEFT JOIN tab2 (tab1.id = tab2.tab1_id)


Gdzie tab2.tab1_id jest kluczem obcym tabeli tab1.id
pyrek
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
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
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
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
tak wiem na początku miałem taką opcje ale z przyczyn wyższych musiałem z tego zrezygnować
Aztech
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?
cool.gif 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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.