Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Wyszukiwarka zaawansowana artykułów wg parametrów i wyliczenie znalezionych pozycji.
Forum PHP.pl > Forum > PHP
luis2luis
Witam.

Przeglądałem ostatnio pewien sklep i zainteresowało mnie jak działa wyszukiwarka zaawansowana a w niej parametry. Po kliknięciu w jakiś parametr widze, że liczba znalezionych pozycji w innych się przelicza. Adres tego serwisu, wyszukiwarka parametrów z lewej strony i liczby w nawiasach.

Kiedyś widziałem taki mechanizm opisany na tym albo zagranicznym forum, ale nie moge znaleźć.


Na jakiej zasadzie działą takie wyliczanie znalezionych rekordów, chodzi o liczby w nawiasach? Czy wrzucić wszystko co mam do tablicy php i tam eliminowac niepotrzebne + sumować te któe trzeba pozycjhe, czy z poziomu sql'a zrobić?

Wyszukiwarke taką chce użyć do bloga, ale zasada działania podobna.

Układ tabel nieskomplikowany.


Cytat
BLOG_ARTYKULY
art_id
art_nazwa
art_opis
...


BLOG_PARAMETRY - tutaj trzymam definicje poszczególnych parametrów, ich nazwa itd.
param_id
param_nazwa


BLOG_ARTYKULY_PARAMETRY - tutaj już konkretne połaczenie prodduktu z
param_id
art_id
wartosc_parametru



Co ważne, wyświetlajac np 200 wyników, dziele je na strony za pomcą sql LIMIT 0-50, czyli nie mam dostępu do wszystkich rekordów, jeżeli się da, chciałbym uniknąć wykonywnaia drugiego takiego samego zapytania bez LIMIT.

Prosze o wyjaśnienia jak można taki element zaplanować?

Pozdr.
sabat24
To co chcesz osiągnąć zwie się wyszukiwaniem fasetowym i/lub nawigacją fasetową (faceted search i faceted navigation). Musisz mieć osobne tabele, w których będziesz trzymał stosowne wyliczenia.
Tutaj masz tutorial do php / mysql. Jest on dość banalny i niezbyt optymalny, ale przynajmniej rzuca światło na problem. W zależności od wielkości serwisu, możliwe, że musiałbyś uruchomić osobną aplikację (demona) w celu aktualizacji faset.
andrzuk
Cytat
Czy wrzucić wszystko co mam do tablicy php i tam eliminowac niepotrzebne + sumować te któe trzeba pozycjhe, czy z poziomu sql'a zrobić?

Zdecydowanie z poziomu SQL-a! Po co wrzucać całą tabelę bazy do tablicy? Lepiej wykorzystać silnik bazy do wyszukania. Ja robię to w dwóch krokach. Najpierw zapytanie do bazy o liczbę pasujących rekordów - SELECT COUNT(*)... Potem zapytanie o pierwszą stronę listy pasujących rekordów - SELECT * ... LIMIT 0, 50. A przy przechodzeniu po paginacji do kolejnych stron tylko zmieniam ... LIMIT 1, 50 dla drugiej, LIMIT 2, 50 dla trzeciej itd. Ale, mając liczbę rekordów i wielkość strony (twoje 50), musisz wcześniej obliczyć, ile ci wyjdzie stron paginacji.
luis2luis
Cytat(sabat24 @ 22.09.2017, 08:54:43 ) *
To co chcesz osiągnąć zwie się wyszukiwaniem fasetowym i/lub nawigacją fasetową (faceted search i faceted navigation). Musisz mieć osobne tabele, w których będziesz trzymał stosowne wyliczenia.
Tutaj masz tutorial do php / mysql. Jest on dość banalny i niezbyt optymalny, ale przynajmniej rzuca światło na problem. W zależności od wielkości serwisu, możliwe, że musiałbyś uruchomić osobną aplikację (demona) w celu aktualizacji faset.


Wielkie dizęki kolego za podpowiedź, samo nakierowanie to dla mnie bardzo dużo, nie wiedziąłem jak tego szukać smile.gif
Zapoznamisę z artykułem, jak znajde coś lepszego wstawie tutaj dla potomnych smile.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.