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

Melhor maneira de extrair itens semelhantes de um banco de dados MySQL


Para tabelas myisam, você pode usar a pesquisa de texto completo em linguagem natural:http://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html
SELECT * FROM article a
LEFT JOIN articletag at ON (at.articleid = a.articleid)
LEFT JOIN tag t ON (at.tagid = t.tagid)
WHERE MATCH (a.title) AGAINST ('some title' IN NATURAL LANGUAGE MODE)
OR MATCH (t.tagtext) AGAINST ('some tag' IN NATURAL LANGUAGE MODE)
GROUP BY a.articleid # if you don't want get duplicates 

Você também pode pensar em adicionar informações redundantes sobre tags em um campo (por exemplo, <taga><tagb><tagz> ) na tabela de artigos e atualize-a cada vez que a tag for adicionada/removida. Isso simplificará a consulta e deve ser mais rápido:
SELECT * FROM article a
WHERE MATCH (a.title, a.tagtext) AGAINST ('some title or tag' IN NATURAL LANGUAGE MODE)