Mysql
 sql >> Base de données >  >> RDS >> Mysql

Meilleur moyen d'extraire des éléments similaires d'une base de données MySQL

Pour les tables myisam, vous pouvez utiliser la recherche en texte intégral en langage naturel :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 

Vous pouvez également penser à ajouter des informations redondantes sur les balises dans un champ (par exemple, <taga><tagb><tagz> ) dans la table des articles et mettez-la à jour à chaque ajout/suppression d'une balise. Cela simplifiera la requête et devrait être plus rapide :

SELECT * FROM article a
WHERE MATCH (a.title, a.tagtext) AGAINST ('some title or tag' IN NATURAL LANGUAGE MODE)