Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tagi - wyszukiwanie podobnych :/
Forum PHP.pl > Forum > PHP
ahold
Dzieńdoberek,


Ostatnio dyskutowaliśmy sobie na temat "tagowania" materiałów.
Doszliśmy że zrobimy osobną tabelę, w niej podamy "własciciela","identyfikator artykułu","tag".
Plus oczywiście data która ma nam umilić zarządzanie.

Wpadłem trochę w tarapaty ponieważ patrzę na projekt i myslę, upsss, jest problem.

PODOBNE ARTYKUŁY
bazując na tagach.

No super, tylko jak się za to zabrać snitch.gif

Selektem możemy wyciągnąć tagi przypisane do danego artykułu.
dostaniemy powiedzmy
ala
ma
kota
białego



I kurcze, jak teraz zrobić do tego "podobne"

To jest pytanie, za 100 punktów.

Jasnę, można zrobić SELECT xxx FROM xxx WHERE xxx LIKE '%tag1% AND LIKE '%tag2%'
Ale, co mi to kurcze da ?
Chyba nie posegreguje mi danych według tendencji rosnącej czyli najpierw materiały mające najwięcej "takich" tagów, potem te które będą miały tylko jeden tag ?


Koncepcja, przydała by się koncepcja.
kamil_biela
1. Poczytaj o group by w SQLu

2. selectuj z artykuł, daj JOIN tag_artykul
ahold
Witam,

Po przeczytaniu wielu stron tekstu, wracam wyposażony w pewien kod.

Kod który winnien działać, lecz nie działa.
Tj działa, ale dla tekstów >= 4 znaki.

Konfiguracja serwera SQL poprawna, poniżej screen

min_word_length -> 3 znaki

  1. SELECT * , count( witryna ) AS ilosc
  2. FROM witryny_tagi WHERE MATCH (
  3. tag
  4. )
  5. AGAINST (
  6. 'pda'
  7. )
  8. GROUP BY witryna
  9. ORDER BY ilosc DESC LIMIT 10


Kod zwraca 0

Dla porównania:

WHERE



Kod powyższy, który nie działa, w momencie kiedy użyje 4 znakowego kodu, rusza poprawnie.
Przyznam się szczeże że nie wiem czego to jest wina. Serwe mySQL wydaje się interpretować zapis odnośnie minimalnej ilości znaków, jednakże czemu nie chcę przeszukiwać tych 3 znaków ?

Czy nie macie Państwo jakiejs podpowiedzi ?
zeulus
http://dev.mysql.com/doc/refman/5.1/en/ful...ine-tuning.html

Przeczytaj sobie to, co tam jest napisane. Co do długości interesują Cię zmienne ft_min_word_len i ft_max_word_len. Sprawdź sobie też stopwords.

Pozdrawiam
ahold
Racja, zapomniałem repair table.

Teraz działa.
kamil_biela
Ja bym te podobne tak zrealizował:

pobierasz artykuł (powiedzmy że ma id 13)

pobierasz tagi danego artykułu (powiedzmy 1 i 2)

Kod
SELECT a.*, COUNT(a.id) as cnt FROM artykul a
JOIN artykul_tag at on (a.id = at.a_id)
WHERE at.t_id IN (1, 2) // tutaj dajesz tagi wybranego artykulu
  AND a.id != 13
GROUP BY a.id
HAVING cnt > 0
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.