Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie użytkowników na podstawie tagów
Forum PHP.pl > Forum > Bazy danych > MySQL
Athlan
Witam,

posiadam tabelę tagów, która wygląda następująco:
  1. CREATE TABLE `cms_messages_tags` (
  2. `tag_name` varchar(255) NOT NULL,
  3. `tag_message` int(11) NOT NULL,
  4. `tag_user` int(11) NOT NULL,
  5. KEY `tag_name` (`tag_name`),
  6. KEY `tag_user` (`tag_user`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Pobranie najpopularniejszych tagów użytkownika nie jest problemem:
  1. SELECT COUNT(tag_name) AS tag_times, tag_name FROM `cms_messages_tags`
  2. WHERE tag_user = 3 GROUP BY tag_name ORDER BY tag_times DESC LIMIT 0, 30


Chciałbym pobrać 30 użytkowników, którzy piszą najbardziej zbliżoną treść do użytkownika X na podstawie występowania tagów. Na pewno pomoże mi w tym powyższe zapytanie, aby na podstawie jego wyniku opracować listę tych użytkowników. Nie mam pomysłu jak to ugryźć, wszelkie rady mile widziane.

Pozdrawiam.
nexis
Na podstawie podane przez ciebie zapytania otrzymasz mniej więcej taki wynik:

Kod
45 PHP
32 MySQL
13 Java
6  Perl
3 Python
1 Linux
1 Windows


Na podstawie tej listy powinieneś, moim zdaniem, pobrać 30 użytkowników dla każdej wartości, czyli:
  1. SELECT COUNT(`tag_name`) AS `tag_times`, `tag_user` FROM `cms_messages_tags` WHERE `tag_name` = 'PHP' GROUP BY `tag_user` ORDER BY `tag_times` DESC LIMIT 30

  1. SELECT COUNT(`tag_name`) AS `tag_times`, `tag_user` FROM `cms_messages_tags` WHERE `tag_name` = 'MySQL' GROUP BY `tag_user` ORDER BY `tag_times` DESC LIMIT 30

itd.

A następnie scalić powyższe wyniki, mnożąc jednocześnie otrzymane współczynniki, aby dla najpopularniejszych tagów użytkownika X, znaleźć również najbardziej zbliżonych użytkowników. Na sam koniec wystarczy posortować tablicę i gotowe.
Athlan
Miałem podobny pomysł, ale nie wiem co zrobić dalej, gdy pobiorę już listę użytkowników dla każdego tagu i scalę ją. Jak posortować listę użytkowników (jest ich ilość tagów * załóżmy te 30), aby wybrać 15 tych najbardziej trafnych? Pytanie zadane na forum dotyczy bardziej kwestii wymnożenia współczynników, za co nie potrafię się zabrać.
erix
Hmm, w MySQL (i nie tylko w MySQL) była taka funkcja, która obliczała współczynnik podobieństwa dwóch łańcuchów - SOUNDEX.
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.