Come posso elencare i post di blog correlati ordinati in base al numero di tag comuni?

StackOverflow https://stackoverflow.com/questions/818551

  •  03-07-2019
  •  | 
  •  

Domanda

Voglio visualizzare un elenco di post di blog correlati e desidero che l'elenco sia ordinato in base al numero di tag comuni che hanno al post corrente. A ogni post possono essere associati più tag. Ecco la mia struttura della tabella:

[Posts] < - [posts-to-tags-joining-table] - > [Tag]

Sto usando PHP e MySQL - posso farlo in una query?

È stato utile?

Soluzione

Che dire di ...:

SELECT COUNT(*) AS numcommon, posts.pid, posts.post FROM posts
               INNER JOIN p2t ON p2t.pid = posts.pid
               WHERE p2t.tid IN
               (SELECT p2t.tid FROM p2t
               INNER JOIN posts ON p2t.pid = posts.pid
               WHERE posts.pid = 1)
               AND posts.pid != 1
               GROUP BY posts.pid
               ORDER BY numcommon

supponendo pid come chiave primaria nella tabella dei messaggi, tid come chiave primaria nella tabella dei tag, entrambe le chiavi esterne nella tabella p2t (post to tag)?

Altri suggerimenti

Sicuro che puoi farlo in una sola query:

SELECT postid, count(tagid) as common_tag_count
FROM posts_to_tags
WHERE tagid IN (SELECT tagid FROM posts_to_tags WHERE postid = 2)
GROUP BY postid ORDER BY common_tag_count DESC; 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top