Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przeszukiwanie tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
pc5
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źć.
SongoQ
Niestety musisz powturzyc wszystkie pola i do nich warunki.

Wszystkie pola bedziesz przeszukiwal w 1 zapytaniu czy bo beidzie zalezne jakie pole od opcji?
pc5
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
tts
ano bedzie gigant zapytanie, ale chyba nie bedziesz go recznie wklepywal, a pozwolisz go pehapowi wygenerowac...?
pc5
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...
tts
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.
pc5
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ć? :/
Darti
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
SongoQ
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.
tts
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
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.