randomek
7.09.2010, 23:19:15
Witam,
Interesuje mnie sposób rozwiązania filtrowania, który jest np na stronie
http://www.projektoskop.pl/domy.htmlMamy tam do wyboru różne parametry domu a w adresie zmienia się tylko s-{NUMEREK}.html
Właśnie chodzi mi o ten {NUMERE} skąd on się bierze i jak potem aplikacja wie jakie filtry w nim zastosowano, dodatkowo kwestia ilości wyników po wybraniu jakiegoś filtru - jaka jest struktura bazy?
tehaha
7.09.2010, 23:21:29
po prostu są to najprawdopodobniej filtry ustawiane z panelu admina, numerek po s- to identyfikator filtru, skrypt łączy się z bazą i pobiera szczegóły filtru przypisane do numer id, następnie filtruje oferty
randomek
7.09.2010, 23:36:25
Czyli jak dodam nowe kryterium to dodaję w bazie wszystkie możliwe kombinacje?
Jeśli tak to trochę tego jest i trzeba znaleźć wszystkie kombinacje bez powtórzeń np 100-elementowego zbioru i chyba jest problem z usuwanie danego kryterium a na projektoskopie kazde kryterium można usunąć i wybrać inne
tehaha
7.09.2010, 23:53:03
nie kombinacje, tylko filtr do zapytania sql, przykładowo masz tam typ projektu, to sobie zapisujesz, że filtr o ID 743647 , dotyczy kolumny o nazwie : "TYP" , i wartość to id 8 ( DOM) . pobierasz to i tworzy zapytanie :
SELECT * FROM oferty WHERE typ = '8'
czyli taki filtr to może być prosta tabelka:
filter_id | filter_column | filter_value
743647 | typ | 8
432432 | zabudowa | 15
randomek
8.09.2010, 00:02:55
Bez kombinacji tego nie widze, bo weźmy
http://www.projektoskop.pl/domy,s-6985989.htmlWybrano kryteria : domy | w technologii tradycyjnej | parterowe | dach dwuspadowy
Teraz usuwam "w technologii tradycyjnej" i mam "domy | parterowe | dach dwuspadowy"
Więc jak na razie nie widzę tych zapytańdo bazy przy takiej prostej tabelce... (weźmy pod uwagę, że jak wybierzemy jakieś kryterium to mam inne linki bo uwzględniają te wybrane)
everth
8.09.2010, 00:25:30
Ale jakiej kombinacji? Załóżmy że operujesz na jednej tabeli (najprostszy przykład). Jest to tabela oferty. ma ona klucz ID i cechy(kolumny) określające ofertę. Np. typ projektu - dom, mieszkanie, apartament, szałas
powierzchnia - jakaś liczba
technologia - jakaś technologia (może być zakodowana liczbą)
typ dachu - jakies typy (jak powyżej)
liczba pieter - jakas liczba
Wybór jakiejkolwiek cechy zawęża liczbę ofert. Masz kilka/kilkanaście cech - złączasz je w zapytaniu za pomocą operatora AND. Czyli:
#Pierwsze twoje zapytanie
SELECT id FROM ofert WHERE typ='dom' AND liczba_pieter=1 AND typ_dachu='dwuspadowy' AND technologia='tradycyjna'
#Drugie zapytanie
SELECT id FROM ofert WHERE typ='dom' AND liczba_pieter=1 AND typ_dachu='dwuspadowy'
Gdzie tu masz jakiekolwiek kombinacje? Zauważ że stronka którą podałeś nie tylko odsyła cię pod podane ID ale też generuje dla ciebie ciasteczko - ono ma kilka zakodowanych pól dzięki czemu można cię wyróżnić z tłumu
tehaha
8.09.2010, 00:31:15
eh no wiadomo, że tam to jest bardziej skomplikowane, ja tylko pokazałem Ci prosty przykład, dla prezentacji jak to może być zrobione, można by też trzymać od razu przygotowaną klauzurę WHERE i tylko wklejać ją do zapytania
randomek
8.09.2010, 00:52:34
Właśnie tam jest to bardziej skomplikowane i nie sądze aby kryterium to była kolumna, trzymanie where lub id filtra i jego parametrów powoduje że jak wspomniałem przy dodaniu/usunięciu czegoś nowego musimy znaleźć wszystkie kombinacje bez powtórzeń (http://pl.wikipedia.org/wiki/Kombinacja_bez_powtórzeń - o takie kombinacje mi chodziło)
Właśnie na tej stronie mogę wybrać dowolną kombinację k-elementową ze zbioru n-elementowego dodatkowo przy każdej mam od razu ilość wyników
Ciasteczka raczej nie mają nic do rzeczy bo wszystkie linki są i muszą być stałe
tehaha
8.09.2010, 01:32:52
ale jakie znowu wszystkie kombinacje?? Przecież tam masz zwykłe sortowanie po kolumnach: typ, powierzchnia, technologia, technologia, zabudowa itp. Bardzo proste zapytania sql, w tabeli filtrów trzymasz sobie kryteria do budowy klauzury WHERE, a jeżeli jakaś kategoria czy typ zostanie usunięty, to dla porządku usuwasz filtr, który je zawiera i tyle, żadna filozofia. Przecież jak robisz na stronie wyszukiwarkę/filtrowanie to również umożliwiasz ustalanie kryteriów wyszukiwania dla wielu kolumn i budujesz zapytanie sql, a to jest dokładnie taka sama sytuacja tylko, że te kryteria są zapisane w bazie
tehaha
8.09.2010, 01:32:52
ale jakie znowu wszystkie kombinacje?? Przecież tam masz zwykłe sortowanie po kolumnach: typ, powierzchnia, technologia, technologia, zabudowa itp. Bardzo proste zapytania sql, w tabeli filtrów trzymasz sobie kryteria do budowy klauzury WHERE, a jeżeli jakaś kategoria czy typ zostanie usunięty, to dla porządku usuwasz filtr, który je zawiera i tyle, żadna filozofia
everth
8.09.2010, 02:03:12
randomek - zrozumiałem w końcu o co ci chodzi. Rzeczywiście - z pozoru wygląda to na jakiś cache zapytań. Ale głowy za to nie dam.
@tehaha jemu chodzi o to że linki wyznaczające argumenty są stałe i nie wymagają każdorazowego przesyłania postem. Sprawdź sobie - podasz ten sam link na różnych ip z różnych przeglądarek to wyznaczy ci te same argumenty. Raczej cache - ale rozmiar czegoś takiego mi się nie podoba.
EDIT: Jeszcze co mi wpadło do głowy to to, że argumenty mogą być zapisane łącznie a później przekształcone jakąś odwracalną funkcją w liczbę. Np. (tutaj argument przyjmuje postać liczby w zakresie 0-99)
240415 ->23456
0208070345->368
02->2067
Nie wiem czy jest to możliwe ale gdyby było, to jest bardzo prawdopodobne rozwiązanie stałych linków.
tehaha
8.09.2010, 08:35:46
no rzeczywiście, tam jest jakiś kod generowany funkcją, ponieważ ten kod się zmienia, po wyborze jakiegoś typu, ale ten sposób wydaje mi się zbytecznie przekombinowany, można by sobie ten filtr składać w sesji dodają tylko poszczególne reguły, w końcu to tylko filtrowanie po kilkunastu kolumnach
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.