Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Articoli correlati in base ai tag

    ciao,
    ho un database con più tabelle, alcune delle quali sono:

    articoli
    id_art | titolo | contenuto

    tags
    id_tag | nome_tag

    correlazioni
    id_tag | id_art

    con questo sistema genero il classico tag cloud, e fin qua nessun problema

    ora vorrei inserire, nella pagina in cui compare l'articolo selezionato, gli articoli che hanno gli stessi tag o parte di essi in base alla rilevanza (naturalmente maggior numero di tag uguali porta ad una rilevanza maggiore)

    non so come fare, cioè non so impostare la query per cercare la rilevanza maggiore, sapete aiutarmi? grazie
    Manifesto Aggiornato
    Sono proprietà privata di Reika

  2. #2
    Vediamo un po'.

    Sia $id l'id dell'articolo che stai visualizzando, allora la query

    codice:
    SELECT id_tag FROM correlazioni WHERE id_art = $id
    ti restituisce la lista degli id delle tag associate all'articolo.

    Ora, sfruttando le select innestate, estendiamo questa query

    codice:
    SELECT id_art FROM correlazioni WHERE id_art <> $id AND id_tag IN (
    SELECT id_tag FROM correlazioni WHERE id_art = $id
    ) ORDER BY id_art
    In questo modo dovresti ottenere la lista di tutti gli id degli articoli che hanno almeno un tag comune all'articolo $id. Per coerenza escludiamo dai risultati l'articolo $id.

    Ultimo miglioramento. Sfruttando funzioni di aggregazione di SQL conteremo quante volte si ripete una relazione

    codice:
    SELECT id_art, COUNT(id_art) AS relazioni FROM correlazioni WHERE id_art <> $id AND id_tag IN (
    SELECT id_tag FROM correlazioni WHERE id_art = $id
    ) GROUP BY id_art ORDER BY relazioni DESC
    Gruppando sull'id_art possiamo contare quante volte uno stesso id_art è ripetuto.
    Immaginando che nella tabella correlazioni coppie <id_art, id_tag> si ripetano una sola volta, il numero di ripetizioni equivale al numero di tags comuni.
    Ordinando per numero di relazioni discendente ottieni quindi gli articoli correlati secondo il grado di rilevanza.

    Spero sia tutto chiaro

    Buon weekend

  3. #3
    grazie tantissimo per l'aiuto, il codice funziona alla perfezione, ora mi tocca studiarmi le select innestate che non conoscevo grazie ancora
    Manifesto Aggiornato
    Sono proprietà privata di Reika

  4. #4
    Prego! Prego!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.