Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przeszukiwanie tabeli, proszę o poradę
pc5
post
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 10.03.2005

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


Witam!

Mam tabelę, a wniej ok 40 kolumn. Potrzebuję przeszukać wszystkie 40 kolumn, dajmy na to że kluczem wyszukiwania jest jakaś zmienna $szukane z formularza, pole text. Jak przeszukać całą tabelę wg. tego kryterium? Pierwsza myśl jaka mi przychodzi do głowy to SELECT * FROM nazwa_tabeli WHERE kolumnna1,kolumna2,kolumna3... LIKE '%$szukane%'

Na pewno jest jakiś prostszy sposób.... niestety nie udało mi się go znaleźć.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
SongoQ
post
Post #2





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%)
-----


Niestety musisz powturzyc wszystkie pola i do nich warunki.

Wszystkie pola bedziesz przeszukiwal w 1 zapytaniu czy bo beidzie zalezne jakie pole od opcji?


--------------------
Go to the top of the page
+Quote Post
pc5
post
Post #3





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 10.03.2005

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


Cytat(SongoQ @ 2005-03-12 21:02:54)
Niestety musisz powturzyc wszystkie pola i do nich warunki.

Wszystkie pola bedziesz przeszukiwal w 1 zapytaniu czy bo beidzie zalezne jakie pole od opcji?

Ogólnie problem polega na tym by przeszukać tabelę w której jest właśnie około 40 kolumn. Jeżeli chciałbym zrobić to w 1 zapytaniu, to będzie to gigant zapytanie. aarambo.gif Myślałem że jest na to jakiś prosty sposób... jeszcze mam nadzieję rolleyes.gif
Go to the top of the page
+Quote Post
tts
post
Post #4





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 14.02.2005

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


ano bedzie gigant zapytanie, ale chyba nie bedziesz go recznie wklepywal, a pozwolisz go pehapowi wygenerowac...?


--------------------
"... - Water's wet, the sky is blue and old Satan Claus Jimmy, he's out there and he just gettin' stronger.
- So what do we do about that?
- Be prepared son that's my motto, be prepared..."
Go to the top of the page
+Quote Post
pc5
post
Post #5





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 10.03.2005

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


Cytat(tts @ 2005-03-13 02:29:46)
ano bedzie gigant zapytanie, ale chyba nie bedziesz go recznie wklepywal, a pozwolisz go pehapowi wygenerowac...?

Myślę że wygeneruje sobie stringa zapytania jakąś pętelką, ale chciałbym to elegancko zrobić. Z tego co wiem jest funkcja zwracająca nazwę kolumny. Więc w jakiejś pętelce to zapuszczę i wyjdzie gotowy string do zapytania. A pozatym odkryłem że phpMyAdmin ma funkcję generowania kodu php, więc najwyżej na żywca mogę zrobić kopiuj wklej...
Go to the top of the page
+Quote Post
tts
post
Post #6





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 14.02.2005

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


tak mi przyszlo do glowy: czy nie da sie tak przebudowac struktury tabeli i logiki kodu, aby wyszukowanie odbywalo sie po jednej kolumnie, tzw. slowach kluczowych? btw, skoro wyszukujesz po kazdej kolumnie to nie zapomnij o indeksach.


--------------------
"... - Water's wet, the sky is blue and old Satan Claus Jimmy, he's out there and he just gettin' stronger.
- So what do we do about that?
- Be prepared son that's my motto, be prepared..."
Go to the top of the page
+Quote Post
pc5
post
Post #7





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 10.03.2005

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


Cytat(tts @ 2005-03-13 12:38:19)
tak mi przyszlo do glowy: czy nie da sie tak przebudowac struktury tabeli i logiki kodu, aby wyszukowanie odbywalo sie po jednej kolumnie, tzw. slowach kluczowych? btw, skoro wyszukujesz po kazdej kolumnie to nie zapomnij o indeksach.

Niestety nie chciałbym przebudowywać struktury tabeli. Za dużo z tym roboty. Teraz zastanawiam się tylko co jest wydajniejsze i bardziej odpowiednie do takiej sytuacji, a jednocześnie nie sprawi kłopotów. Mam 2 pomysły :

1. W pętli tworzę zapytanie, do którego wstawiam wszystkie odpowiednie warunki. Będzie to np. 'kategoria LIKE '%$szukane%' OR kolumna2 LIKE '%szukane%' itd, lub coś podobnego. - zapytanie gigant, łatwe to zrobienia

2. Przeszukiwanie każdej z kolumna osobno, wyniki będą zapisywane w odpowiednim miejscu. - trudniejsze moim zdaniem, ale myślę że wydajniejsze.

Króte wybrać? :/
Go to the top of the page
+Quote Post
Darti
post
Post #8





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


ja zawsze staram się wykonywać jak najmniej zapytań do bazy - nie szkodzi że to zapytanie gigant - myślę, że MySQL jest zoptymalizowany dla takich działań

A poza tym zrób oba rozwiązania i benchmarkuj

Ten post edytował Darti 13.03.2005, 17:18:47


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
SongoQ
post
Post #9





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%)
-----


Z tego co pamietam to algorytmy wyszukiwania dla ORow (w przypadku PG tak bylo) dla bardzo duzej liczby rekordow troche wydluzaja czas wykonania, zeby Ci takie zapytanie przypadkiem sie bardzo dlugo nie wykonywalo.

Ale warto to sprawdzic, insert w petli kilka milionow.
Jesli przetestujesz to jak mozesz to podziel sie informacjami na forum.


--------------------
Go to the top of the page
+Quote Post
tts
post
Post #10





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 14.02.2005

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


po pierwsze indeksy na kolumnach, inaczej kiszka..
a dalej pojawia sie znany problem czy lepiej duze zapytanie ale po bezsesnownych polach (takich gdzie napewno nic nie znajdziesz) czy kilka mniejszych. generalnie robi sie tak aby wykonywac jak najmniej polaczen do bazy bo to zjada zasoby (nawet polaczenie stale) wiec sesnownym wydaje sie uciekac od kilku mniejszych warunkowych zapytan.. a duze zapytanie... samo w sobie nie jest takie zle jezeli uzywasz LIKE i indeksow, ale zanim zostanie ono wykonane mysql musi je przeanalizowac a to zajmuje troszke czasu. wnioski?
jak juz SongoQ i Darti napisali benchmark i wtedy podejmij decyzje czy przebudowac tabele (wyszukiwanie po mniejszej ilosci pol, slowa kluczowe, etc...) czy moze duze zapytanie czy kilka mniejszych...

i tak jak moi przedmowcy napisali: podziel sie na forum wnioskami biggrin.gif

Ten post edytował tts 14.03.2005, 03:36:49


--------------------
"... - Water's wet, the sky is blue and old Satan Claus Jimmy, he's out there and he just gettin' stronger.
- So what do we do about that?
- Be prepared son that's my motto, be prepared..."
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 - 09:21