Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobieranie użytkowników na podstawie tagów
Athlan
post
Post #1





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


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.
Go to the top of the page
+Quote Post
nexis
post
Post #2





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


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.
Go to the top of the page
+Quote Post
Athlan
post
Post #3





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


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ć.
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.
Go to the top of the page
+Quote Post
wookieb
post
Post #5





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Albo to
http://www.google.pl/#hl=pl&source=hp&...ebced7778fb68eb
I wyjaśnienie co to jest.
http://pl.wikipedia.org/wiki/Odleg%C5%82o%...87_Levenshteina

Ten post edytował wookieb 8.09.2009, 15:19:41
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 18:27