Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z systemem tagów
Forum PHP.pl > Forum > Bazy danych > MySQL
adam882
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.
soomal
Zamiast SELECT... dajesz SELECT DISTINCT ...

BTW, w większości serwisów web 2.0 tagi to pojedyńcze wyrazy.
adam882
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() ?
maly_swd
pokaz zapytanie, wystarczy chyba zmienic grupowanie i bedzie tak jak chcesz
adam882
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)
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.