![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 623 Pomógł: 11 Dołączył: 1.01.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam,
chciałem zrobić mechanizm, który podpowiadałby użytkownikowi podobne artykuły do obecnie czytanego. Wpadł mi do głowy taki pomysł: Powiedzmy, że użytkownik czyta tekst zatytułowany XXX. Jest on opisany przez tagi 'tag1', 'tag2' i 'tag3'. Istnieją jeszcze 3 artykuły w bazie danych: - YYY o tagach 'tag2', 'tag4' - ZZZ o tagach 'tag1', 'tag2', 'tag3', 'tag5' - AAA o tagach 'tag2', 'tag3', 'tag5' Jak widać: - artykuł YYY ma 1 wspólny tag: 'tag2' - artykuł ZZZ ma 3 wspólne tagi: 'tag1', 'tag2', 'tag3' - artykuł AAA ma 2 wspólne tagi: 'tag2', 'tag3' Chciałbym, aby lista podobnych była następuąca: - ZZZ - AAA - YYY Jak widać zostały wypisane artykuły, których ilość wspólnych tagów z artykułem XXX jest malejąca. I teraz pytanie dotyczące SQL: Jak powinno wyglądać odpowiednie zapytanie do DB zakładając, że ma 2 tabele: Article - id - ... (inne mniej istotne pola) Article_tag - id - article_tag - tagi_id Tag - id - name Proszę o wyjaśnienie i podpowiedzi jak takie coś zbudować, bo w jestem cienki w te klocki (SQL). Pozdrawiam ![]() -------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Pomyśl... Wybierasz z tabeli łączącej te, które mają id tagów artykułu joinujesz na tabelę z artykułami, z pominięciem id_artykułu oglądanego, group by id artykułu, count, limit. Najtrudniejsza część to szybkie ograniczenie ogromnej ilości danych tabeli łaczącej. Dlatego sensowniejsze niż zobić joina obu tabel jest joinowanie z już pobranycmi podzapytaniem określonymi id_tagów dla tego artykułu.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 21.06.2025 - 08:18 |