Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka produktów
Forum PHP.pl > Forum > PHP
nexis
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ć?
Cezar708
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
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.