Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z systemem tagów
adam882
post
Post #1





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


Witam

Napisałem system tagów , w którym rolę odgrywają dwie tabele:
strony(id,nazwa,opis...)i tagi(id,nazwa,nazwaoryginalna,idstrony).
Oprócz samych słów przechowywane są też frazy kilku słowne (np. "gry", "darmowe gry" itp.).
Problem pojawia się w przypadku, kiedy strona posiada dwa podobne tagi np. "tanie mieszkania" oraz "tanie domy" i w momencie użycia systemu tagów i szukania słowa pasującego do "tanie" w wyszukiwarce mamy zapytanie WHERE tagi.nazwa LIKE "tanie%" i przez to pokazuje w wynikach dwa razy tę samą stronę. Czy można użyć lepszą metodę? Cy jedynym rozwiązaniem jest zaprzestanie użycia znaku % i w ten sposób szukając frazy "tanie mieszania" rozbijamy frazę i używamy zapytania Where tagi.nazwa LIKE "tanie" OR "mieszkania" OR "tanie mieszkania" ? Wydaje mi się, że tego typu metoda może okazać się nieoptymalna w przypadku długich fraz.
Go to the top of the page
+Quote Post
soomal
post
Post #2





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 4.03.2007

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


Zamiast SELECT... dajesz SELECT DISTINCT ...

BTW, w większości serwisów web 2.0 tagi to pojedyńcze wyrazy.
Go to the top of the page
+Quote Post
adam882
post
Post #3





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


dzięki, jednak problem pojawia się w przypadku użycia "SELECT DISTINCT count(s.id) AS ile...", gdyż w tym przypadku nie uwzględnia DISTINICT sad.gif Czy można w jakiś sposób zrobić, aby uwzględniało count() ?
Go to the top of the page
+Quote Post
maly_swd
post
Post #4





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


pokaz zapytanie, wystarczy chyba zmienic grupowanie i bedzie tak jak chcesz


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
adam882
post
Post #5





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


Zapytanie wygląda tak:
  1. 'SELECT DISTINCT count('.PREFIX.'strony.id) AS ile FROM '.PREFIX.'tagi LEFT JOIN '.PREFIX.'strony ON ('.PREFIX.'tagi.idstrony='.PREFIX.'strony.id) WHERE activ=1 AND '.PREFIX.'tagi.nazwa LIKE "'.$szukaj.'" LIMIT 1 '

i niestety nie uwzględnia select distinic sad.gif (liczy w "ile" również powtarzające się rekordy)

Ten post edytował adam882 27.06.2009, 19:28:25
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 Aktualny czas: 20.08.2025 - 10:27