Wpis z mikrobloga

Mirasy, zastanawiam się jak wykonać pewną funkcjonalność. Załóżmy, że mam aplikacje, która przechowuje książki, książki posiadają tagi, które dodawane są przez użytkowników. Po naciśnięciu przycisku "Show recommendation", chciałbym wyświetlić rekomendacje do tej książki. Książki są rekomendowane jeżeli, załóżmy, mają 2 takie same tagi. Póki co zrobiłem to w bardzo naiwny sposób (pic poniżej), ale to jest raczej nieoptymalne, żeby iterować po wszystkich książkach w bazie. :D Macie może jakieś pomysły jak można by napisać taki system rekomendacji?

#naukaprogramowania #programowanie (język tutaj nie ma znaczenia chyba)
GaHee - Mirasy, zastanawiam się jak wykonać pewną funkcjonalność. Załóżmy, że mam apl...

źródło: comment_rhBMPDwVTKDB2Ysn2rZjv5tFTZJSI6oL.jpg

Pobierz
  • 14
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@GaHee: pivot (tabela many to many), w której trzymasz wszystkie tagi (id) i książki (id), wyszukasz z tej tabeli wszystkie wpisy, które mają tag o id = x i wyciągniesz z tego tytuły książek (relacja).
  • Odpowiedz
@kk_ll: Okej, to by się zgadzało, gdybym chciał wyświetlać książki, które mają wspólny jeden tag, ale ja chce książki, które mają jaknajwięcej wpsólnych tagów (w ramach uproszczenia, przyjąłem, że więcej niż 2).
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@GaHee: w tej tabeli wiersze nie są unique czyli książka z id x może być wielokrotnie zapisana do pivota ale z innym id tagu.
  • Odpowiedz
@GaHee: Wybierasz każdą pozycje, grupujesz, liczysz, sortujesz i limit na najliczniejsze:

SELECT BookId, count(*) as hits FROM BookTags
WHERE BookId <> :id AND TagId IN(:tags)
GROUP BY BookId
ORDER BY hits DESC
LIMIT 5
  • Odpowiedz