![]() |
![]() |
![]()
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źć. |
|
|
![]() |
![]()
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? -------------------- |
|
|
![]()
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. ![]() ![]() |
|
|
![]()
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..." |
|
|
![]()
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... |
|
|
![]()
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..." |
|
|
![]()
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ć? :/ |
|
|
![]()
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 |
|
|
![]()
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. -------------------- |
|
|
![]()
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 ![]() 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..." |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 09:21 |