Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyszukiwarka produktów
nexis
post 15.10.2007, 09:38:16
Post #1





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


Tabela z produktami ma następującą postać:

  1. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2. + id + prid + abid + label + producer +
  3. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  4. + 1 + PPHPDZE3094 + UF011H + HP CP 3Y ONSITE 4H + HP +
  5. + 2 + PPHPDZE3095 + UF011G + HP CP 3Y ONSITE 4G + HP +
  6. + 3 + PPHPDZE3096 + UF011F + HP CP 3Y ONSITE 4F + HP +
  7. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


Obecnie wyszukiwarka działa na następującym zapytaniu:

  1. <?php
  2. $query = "SELECT * FROM products WHERE prid LIKE '%" . $_GET['query'] . "%' OR abid LIKE '%" . $_GET['query'] . "%' OR label LIKE '%" . $_GET['query'] . "%' OR producer LIKE '%" . $_GET['query'] . "%'";
  3. ?>


Ale dobrze wiem, że nie jest to najlepsze rozwiązanie. Macie jakiś pomysł jak mogę to rozbudować?


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
Cezar708
post 15.10.2007, 10:52:54
Post #2





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


Ogólnie rzecz ujmując nie jest źle, problemy pojawią się przy większej liczbie danych do przeszukania.

1. Ja w takich przypadkach robię w ten sposób, że rozdzielam zapytanie. Najlepiej zrobić w ten sposób, aby w formatce wyszukiwarki znalazło się checkbox'y, określające, które dokładnie dane użytkownik ma znaleźć i potem po stronie PHP to obrobić tak aby tylko te zaznaczone kolumny przeszukiwał. Z doświadczenia wiem, że użytkownik rzadko chce przeszukać wszystko lecz jeśli szuka producenta to zaznacza checkbox `producer`, natomieast jeśli chce znaleźć produkt szuka po `prid`... itd
Jeśli przeszukiwana jest większa liczba kolumn to robię przeszukiwanie kaskadowo, czyli na początek biorę te kolumny które mają statystycznie najmniejszą liczbę znaków do przeszukania, potem wiecej i na końcu te kolumny, które mają największą statystyczną liczbę znaków. U Ciebie zrobiłbym to tak:
  1. SELECT * FROM products WHERE producer LIKE '%{criteria]%' OR abid LIKE '%"{criteria]%' OR prid LIKE '%{criteria]%' OR label LIKE '%{criteria]%'"


2. Czasem i to nie wystarcza, wtedy warto zastanowić się nad kaszowaniem wyników i prowadzeniu statystyk. Np może się okazać, że użytkownicy najcześciej wpisują pełną nazwę producenta (np HP) to warto taki wynik wyszukiwania wrzucić do jakiegoś pliku i potem gdy kolejny użytkownik będzie chciał to znaleźć pobierze wartość się z pliku a nie, poprzez kolejne długie zapytanie, z bazy danych. Oczywiście tu tylko naświetliłem problem, bo skomplikowanie statystyk zależy tylko i wyłącznie od Ciebie.

3. Być może dobrym rozwiązaniem jest skorzystanie już z gotowych mechanizmów odzyskiwania danych. Dość dobrym rozwiązaniem jest YAZ zapoznaj się z dokumentacją, poszperaj na ten temat w sieci powinieneś być zadowolony

4. Możesz tak zindeksować swoją stronę aby sam google.com pomógł Ci przeszukiwać informacje. Często jest to dobry sposób, jednak w Twoim przypadku mogą być problemy z tego względu że Ty wyszukujesz konkretne dane z bazy danych, a algorytmy googla dobrze działają na same teksty. Dobre byłoby to rozwiązanie, gdybyś na przykład chciał przeszukiwać artykuły na Twojej stronie za pomocą googla, a nie wyszukiwać produkty.

mam nadzieje, że coś naświetliłem

Pozdrawiam
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:10