![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 1 Dołączył: 12.01.2009 Skąd: Kanapa Ostrzeżenie: (0%) ![]() ![]() |
Witam
Robie wyszukiwarke która będzie wyszukiwać produkty w tabeli, wyszukiwanie musi być, po kilku polach i teraz nie wiem czy takie coś będzie optymalne ?
I jeszcze mam takie pytanie bo autorzy będą wyświetleni jako lista i będzie można zaznaczyć u którego autora ma szukać jak to zrobić ? Ten post edytował Mayka 13.03.2012, 17:15:50 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
jedno slowo okreslajace ten pomysl jesli chodzi o wydajnosc:
masakra ewentualnie, powiedzialbym czyste zło w jednym zapytaniu udalo ci sie zgromadzic najgorsze pomysly dotyczace wyszukiwarki, a to w sumie tez niezle osiagniecie ![]() po pierwsze. ogranicz maksymalnie po stronie php zakres przeszukiwania! najlepiej jesli udalo by ci sie ograniczyc przeszukiwanie do jednego pola po drugie. jesli juz nie uda ci sie ograniczyc ilosci pol do przeszukiwania - zamiast 'or' uzyj 'union' po trzecie jesli to mozliwe, ogranicz wyszukiwanie lewostronnie zamkniete (czyli 'LIKE "$costam%"') pozwoli to wykorzystac indexy w chwili obecnej za tak napisane zapytanie - moj admin zaproponowal by ci honorowe seppuku ![]() a jesli nie uda ci sie skorzystac na zadnej z tych 3 rad (choc minimum 2 da sie wdrozyc) proponuje uzyc Sphinx, lub cos podobnego. j. Ten post edytował alegorn 14.03.2012, 13:22:09 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 702 Pomógł: 65 Dołączył: 16.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
zamiast wyszukiwania LIKE zastosuj index Fulltext w bazie i skorzystaj przy wyszukiwaniu za pomocą jego .
zawsze możesz użyć sphinx'a ,budowałem na nim wyszukiwarki mające po 100 i więcej parametrów wyszukiwania a indexy rekordów w takich przypadkach są zwracane w ciągu 0.015s z bazy zawierającej 3mln rekordów ! -------------------- Nie udzielam pomocy poprzez PW
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Zgadzam się z przedmówcami i dodam, że zdecydowanie lepiej dać Index fulltext na objęte szukaniem pola i używać MATCH AGAINST - zawsze szybsze od tego co proponujesz
![]() -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Powiedzmy, że musisz użyć like i nie możesz pełnotekstowych index'ów (czyli źle zaprojektowana baza) to jest rozwiązanie, które pasuje do tego jak to mój przedmówca napisał honorowego sepuku
![]()
Ten post edytował cudny 15.03.2012, 22:02:32 -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 1 Dołączył: 12.01.2009 Skąd: Kanapa Ostrzeżenie: (0%) ![]() ![]() |
No baza jest jeszcze w takim stadium że można ją troche przeprojektować
![]() i własnie dla tego wolałem zapytać czy jest jakaś możliwość żeby nie obciążać za mocno serwera przy wielu zapytaniach.. Dzieki za pomoc i pomysły. Bede się odyzwał jeszcze w tej sprawie ![]() Bo tak w międzyczasie znalazłem jeszcze na forum takie coś :
Ale to chyba nie wiele zmienia ? ilość pól niestety nie może być ograniczona.. Będzie wyszukiwanie po 6 polach Ten post edytował Mayka 16.03.2012, 13:15:49 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Więc użyj to co Ci zaproponowałem - poprostu łączysz sobie pola textowe i używasz na nich tylko raz LIKE, które jest wyrażeniem regularnym, a dzięki połączeniu pól textowych wykonujesz je tylko raz
-------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 1 Dołączył: 12.01.2009 Skąd: Kanapa Ostrzeżenie: (0%) ![]() ![]() |
Więc użyj to co Ci zaproponowałem - poprostu łączysz sobie pola textowe i używasz na nich tylko raz LIKE, które jest wyrażeniem regularnym, a dzięki połączeniu pól textowych wykonujesz je tylko raz No mogę dodać do każdego z pól ale mam pytanie jak będzie wyglądało szukanie po np. 3 polach ? Bedą brane pod uwage wszystkie 3 na raz przy wyświetlaniu wyników ? Więc fulltext czy Like ? Edit: Wiec przetestowałem i :
Nie działa.. nie wiem dla czego jak by mogl ktoś to poprawić to bede wdzieczny.. natomiast :
działa ale mam jeden problem jak wpisze.. 'login' to wszystko działa ale jak wpisze 'login o obrotach' -> 'mayka o obrotach' to nic nie znajduje dlaczego ? mayka jest w tabeli z loginami, o obrotach jest w tabeli tytuł. Ten post edytował Mayka 16.03.2012, 17:04:10 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
A zajrzyj tutaj,może Cie to naprowadzi:
http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
No mogę dodać do każdego z pól ale mam pytanie jak będzie wyglądało szukanie po np. 3 polach ? Bedą brane pod uwage wszystkie 3 na raz przy wyświetlaniu wyników ? Więc fulltext czy Like ? Edit: Wiec przetestowałem i :
Nie działa.. nie wiem dla czego jak by mogl ktoś to poprawić to bede wdzieczny.. natomiast :
działa ale mam jeden problem jak wpisze.. 'login' to wszystko działa ale jak wpisze 'login o obrotach' -> 'mayka o obrotach' to nic nie znajduje dlaczego ? mayka jest w tabeli z loginami, o obrotach jest w tabeli tytuł. No bo tak: kolumna tytul = 'jakis tytul i tak dalej' kolumna autor = 'to jest autor i w ogole' kolumna data = '2010-10-12' kolumna login = 'mayka' po concat masz: 'jakis tytul i tak dalej to jest autor i w ogole2010-10-12mayka' musisz dać: 'jakis tytul i tak dalej to jest autor i w ogole2010-10-12mayka' LIKE '%tytul%mayka%' wtedy ci znajdzie. Ogólnie % to jest coś co zastępuje cokolwiek (jakikolwiek znak) -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
Cytat 'jakis tytul i tak dalej to jest autor i w ogole2010-10-12mayka' musisz dać: 'jakis tytul i tak dalej to jest autor i w ogole2010-10-12mayka' LIKE '%tytul%mayka%' wtedy ci znajdzie. Ogólnie % to jest coś co zastępuje cokolwiek (jakikolwiek znak) Po to Kolega chce użyć fulltext, żeby nie używać Like który jest nieoptymalny w procesie wyszukiwania. |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
No, cały czas jest pisane o full text search ale w tym wyadku lepsze błdzie chyba użycie jednego wyrażenia regularnego niż 4 krotne użycie full text no nie ?
poprzez concat nie zadziała full text i trzeba będize zrobić 4 * OR -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 195 Pomógł: 109 Dołączył: 3.11.2011 Ostrzeżenie: (10%) ![]() ![]() |
A spojrzałeś chociaż na ten link co podałem?
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 1 Dołączył: 12.01.2009 Skąd: Kanapa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
To było do mnie
![]() ![]() Mayka pytał o like więc dałem rozwiązanie, z tym, że $szukaj pokazywała się do każdej kolumny, więc uznałem, że szuka $szukaj w czterech kolumnach - wtedy like to zwykłe wyrażenie pojedyńcze. Ogólnie można pokombinować z indexami pełnotextowymi, to już nie moja działka ![]() -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 07:01 |