我有一个项目数据库(关于这个问题的文章) 我想做的是,我想基于两件事来拉出与特定项目类似的X项目 - 标题,即文章的标题,以及标签,它们位于另一个表格中。
结构如下(仅限相关领域):
表:文章
字段:articleid,title
表:标签
字段:tagid,tagtext
表:articletag
字段:tagid,articleid
最好的方法是什么?
答案 0 :(得分:0)
对于myisam表,您可以使用自然语言全文搜索: 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
您还可以考虑将有关标记的冗余信息添加到文章表中的一个字段(例如<taga><tagb><tagz>
)中,并在每次添加/删除标记时更新它。这将简化查询,它应该更快:
SELECT * FROM article a
WHERE MATCH (a.title, a.tagtext) AGAINST ('some title or tag' IN NATURAL LANGUAGE MODE)