我有一個項目(針對該問題的文章)的數據庫。
我想要做的是,我想要拉出與特定項目相似的X個項目,基於兩件事情 - 標題,這是文章的標題和標籤,它們位於另一個項目中表。從MySQL數據庫中提取類似項目的最佳方法
的結構如下(相關字段只):
表:文章
字段:條款ArticleID,標題
表:標籤
字段:標籤識別,標記文本
表:articletag
Fields:tagid,articleid
這樣做的最佳方法是什麼?
我有一個項目(針對該問題的文章)的數據庫。
我想要做的是,我想要拉出與特定項目相似的X個項目,基於兩件事情 - 標題,這是文章的標題和標籤,它們位於另一個項目中表。從MySQL數據庫中提取類似項目的最佳方法
的結構如下(相關字段只):
表:文章
字段:條款ArticleID,標題
表:標籤
字段:標籤識別,標記文本
表:articletag
Fields:tagid,articleid
這樣做的最佳方法是什麼?
對於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)
我在尋找SIMILAR的物品。 – Lior
抱歉不理解你 - 我已經更新了答案。 –
你將不得不給出你認爲是「相似」 –
@Derek Kromm類似的更具體的解釋 - 項目具有相似的標題(我是思考MATCH AGAINST,然後按評分排序)和匹配標籤(顯然不是必需的)。 – Lior