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:
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.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
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 è:
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.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++; } }
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


Rispondi quotando