Como faço para listar posts relacionados ordenadas pelo número de marcas comuns?
Pergunta
Eu quero exibir uma lista de posts relacionados e quero que a lista seja ordenada pelo número de tags comuns que têm para o cargo atual. Cada post pode ter várias marcas associadas a ele. Aqui está minha estrutura de tabela:
[mensagens] <- [mensagens-to-tags de juntar-table] -> [tags]
Eu estou usando PHP e MySQL -? Eu posso fazer isso em uma consulta ??p>
Solução
E sobre ...:
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
assumindo pid como a chave primária na tabela de mensagens, tid como a chave primária na tabela de marcas, ambas as chaves estrangeiras na P2T (post a tag) mesa?
Outras dicas
Claro que você pode fazê-lo em uma consulta:
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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow