Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z wyszukiwaniem w bazie, skomplikowane zapytanie
pyrek
post
Post #1





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 23.09.2003

Ostrzeżenie: (0%)
-----


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ć
Go to the top of the page
+Quote Post
Aztech
post
Post #2





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
pyrek
post
Post #3





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 23.09.2003

Ostrzeżenie: (0%)
-----


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

Ten post edytował pyrek 23.11.2005, 14:31:03
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


  1. SELECT *
  2. FROM tab1 LEFT JOIN tab2 (tab1.id = tab2.tab1_id)


Gdzie tab2.tab1_id jest kluczem obcym tabeli tab1.id


--------------------
Go to the top of the page
+Quote Post
pyrek
post
Post #5





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 23.09.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Aztech
post
Post #6





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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

Ten post edytował Aztech 23.11.2005, 15:43:38
Go to the top of the page
+Quote Post
pyrek
post
Post #7





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 23.09.2003

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Aztech
post
Post #8





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Aztech 23.11.2005, 16:22:43
Go to the top of the page
+Quote Post
pyrek
post
Post #9





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 23.09.2003

Ostrzeżenie: (0%)
-----


tak wiem na początku miałem taką opcje ale z przyczyn wyższych musiałem z tego zrezygnować
Go to the top of the page
+Quote Post
Aztech
post
Post #10





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 04:39