2011-09-04 36 views
1

我有一個項目(針對該問題的文章)的數據庫。
我想要做的是,我想要拉出與特定項目相似的X個項目,基於兩件事情 - 標題,這是文章的標題和標籤,它們位於另一個項目中表。從MySQL數據庫中提取類似項目的最佳方法

的結構如下(相關字段只):

表:文章
字段:條款ArticleID,標題

表:標籤
字段:標籤識別,標記文本

表:articletag
Fields:tagid,articleid

這樣做的最佳方法是什麼?

+0

你將不得不給出你認爲是「相似」 –

+0

@Derek Kromm類似的更具體的解釋 - 項目具有相似的標題(我是思考MATCH AGAINST,然後按評分排序)和匹配標籤(顯然不是必需的)。 – Lior

回答

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) 
+0

我在尋找SIMILAR的物品。 – Lior

+0

抱歉不理解你 - 我已經更新了答案。 –

相關問題