Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: calcolo Affinità tag

  1. #1

    calcolo Affinità tag

    Salve a tutti, ho un problema sul calcolo dell'affinità tra tag. Vi spiego meglio il mio problema.
    Ho la necessità di calcolare l'affinità tra i tagi inseriti nei post dagli utenti.
    Vi faccio un esempio pratico, inserisco un post di programmazione ed i tag da me scelti sono HTML5, PHP, JAVA.
    In base a questi tag quando un altro utente si logga al mio sito vorrei che gli venissero proposti utenti con tag affini in base al peso dei tag. Quindi se un utente ha inserito un altro post ed ha tag affini ai miei, questo utente è a me affine.

    Ho creato il mio db come da immagine, ho creato una query per calcolare sia il peso che lo username, l'id dei tag e poi ho creato un foreach per cercare di calcolare l'affinità ma ho un pò di problemi.


    La query è questa:


    codice:
    SELECT count( tags_charts.tag_id ) AS conteggio, tags_charts.tag_id, users.username AS nome, users.id AS utente_id FROM tags_charts 
    LEFT JOIN charts ON charts.id = tags_charts.chart_id 
    LEFT JOIN users ON users.id = charts.user_id 
    GROUP BY tags_charts.tag_id, users.id 
    ORDER BY conteggio, tag_id ASC
    da un conteggio veloce sembra funzionare correttamente. Un problema che mi presenta questa query è che alcuni campi sono NULL quando nel db non lo sono.

    La query mi restituisce il peso del tag, quindi quante vole è stato inserito in un post, lo user, il tag id.

    Il codice che stavo cercando di scrivere è:

    codice:
            $i = 0;
            foreach($affinity as $row){
                $tag_id = $row->tag_id;
                $user_id = $row->utente_id;
                foreach($affinity as $new_row){
                    echo $new_row->utente_id.'
    ';
                    if($new_row->utente_id !=  $user_id){
                        if($new_row->tag_id == $tag_id){
                            $new_row->tag_id;
                            $get_affinity[$i]['user_id'] = $row->utente_id;
                            $get_affinity[$i]['tag_id'] = $row->utente_id;
                            $get_affinity[$i]['weight'] = $row->conteggio;
                        }
                    }
                    $i++;
                }
            }
    Ma sinceramente non so come andare avanti. In questo modo volevo creare un array con gli id ed il peso ma non riesco a fare un confronto decente. Almeno da quello che vedo.

    Qualcuno può aiutarmi?
    Inoltre credo che quando un utente si logga sia un pò pesante la query e il codice che eseguo. C'è un modo migliore per poter calcolare questa affinità?
    Grazie

  2. #2
    Qualche idea?
    Grazie
    Frank

  3. #3
    Originariamente inviato da francescocorr
    Qualche idea?
    Grazie
    Frank
    prova ad esplicare con una frase il risultato che vuoi ottere per favore.. cosa significa "affinità"?
    Questa volta, più che un voto.. è favoreggiamento.

  4. #4
    Si non mi sono spiegato molto bene.

    Io utente del sito mi collego e nella sidebar vedo una lista di utenti "simili, affini" a me.
    Questa affinità va calcolata tramite i tag utilizzati nella creazione dei post.

    Tipo utenti che potresti conoscere perchè hanno usato i tag che hai utilizzato anche tu.

    Spero di essere stato più chiaro
    Grazie
    F

  5. #5
    quindi da qualche parte hai un contatore di tag usati da ogni utente..?
    Questa volta, più che un voto.. è favoreggiamento.

  6. #6
    Questa query

    codice:
    SELECT count( tags_charts.tag_id ) AS conteggio, tags_charts.tag_id
    FROM tags_charts
    LEFT JOIN charts ON charts.id = tags_charts.chart_id
    GROUP BY tags_charts.tag_id
    ORDER BY conteggio DESC
    restituisce

    codice:
    conteggio 	tag_id
    148 	          81
    129 	         474
    119 	         478
    63 	         71
    59 	         332
    59 	         415
    56 	         503
    47 	         592
    43 	         635
    41 	         491
    ............

    Dove conteggio è il numero di volte di utilizzo del tag con id tag_id.
    Quindi con questa query, se ho fatto bene, dovrei calcolarmi il peso del tag.

    Poi con la query postata prima tramite il JOIN vado a prendere l'utente che ha usato quel tag. Però forse qui sbaglio...
    Mi sono bloccato

  7. #7
    Originariamente inviato da francescocorr
    Questa query
    qui però non ci sono riferimenti all'utente.. secondo me o fai un conteggio a parte ipoteticamente su una tabella:

    user | tag | count

    dove count sale ogni volta che l'utente posta un "post" con il tag di riferimento


    oppure,
    visto che i tags sono più inerenti ai post che non all'utente, sulla tabella del post:

    id | userid | titolo | contenuto | tags

    da qui poi puoi fare una semplice query dove selezioni tutti i messaggi di un determinato utente e ti calcoli i tags utilizzati..
    Questa volta, più che un voto.. è favoreggiamento.

  8. #8
    invece questa query restituisce:


    codice:
    SELECT count( tags_charts.tag_id ) AS conteggio, tags_charts.tag_id, users.username AS nome, users.id AS utente_id
    FROM tags_charts
    LEFT JOIN charts ON charts.id = tags_charts.chart_id
    LEFT JOIN users ON users.id = charts.user_id
    GROUP BY tags_charts.tag_id
    codice:
    conteggio 	tag_id 	nome 	utente_id
    10 	          1 	        xxxxx 	      1
    9 	          2 	         xxxx 	      1
    2 	          3 	          xxx         	      1
    dove conteggio è il numero di utilizzo del tag con id tag_id, nome è lo user che ha utilizzato quel tag con id utente_id

  9. #9
    Al_katraz984, forse non ho capito cosa mi chiedi.
    Se mi dai qualche indicazione su eventuali errori...

  10. #10
    Originariamente inviato da francescocorr
    Al_katraz984, forse non ho capito cosa mi chiedi.
    Se mi dai qualche indicazione su eventuali errori...
    vedi sopra mi era partito il mess per sbaglio..
    Questa volta, più che un voto.. è favoreggiamento.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.