Usando a pesquisa de texto completo do MySQL
MATCH (col1,col2,...) AGAINST (expr [search_modifier])
coisa. Digamos que sua tabela seja
articles
e você precisa encontrar postagens relacionadas a um título da postagem atual. Faça isso deste modo:SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score
FROM articles
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle')
ORDER BY score DESC LIMIT 5
Isso lhe dará os 5 principais posts relacionados.
Mas primeiro lembre-se de habilitar a pesquisa de texto completo para as colunas dessa tabela, executando esta consulta:
ALTER TABLE articles ADD FULLTEXT (title, body);
[EDIT]:Por que não usar
LIKE
: Esclarecimento ao OP:Porque não dará resultados corretos. Digamos que seu título atual seja "Música de 1980" e você queira postagens relacionadas a isso. Agora, se você usar
LIKE
então só aparecerão os posts contendo EXATAMENTE a sequência de palavras "Música de 1980". No entanto, se você usar MATCH ... AGAINST
, as postagens que contêm Música OR 1980 serão exibidas. Além disso, as postagens que contêm Música e 1980 aparecerão no Top porque dão um SCORE
para cada resultado e estamos classificando por essa pontuação. Espero que esteja claro. [EDIT]:2 :
Se você tiver categorias, você pode adicionar
AND Category = '$CurrentCategory'
na consulta SQL where clause
para obter resultados mais específicos. [EDIT]:3:OP não pode usar texto completo :
Se você não puder usar o texto completo (por algum motivo), basta mostrar 5 postagens aleatórias da mesma categoria. Como eles estão na mesma categoria, eles estão de alguma forma relacionados pelo menos:
SELECT *
FROM articles
WHERE Category = '$CurrentCategory'
LIMIT 5
Sintaxe editada:LIMTI alterado para LIMIT no código MySQL