Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Criando posts relacionados ou semelhantes usando PHP e MySQL


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