2013-03-28 78 views
0

我有一個網站有不同的文章。數據庫結構如下:查找相關文章依據相關性排序

ArticleId | ArticleLocation | ArticleCategory | ArticleTopic

的列中的實際文本字符串是另一個表,以便所有列填充數(整數)

我想找到相關的帖子,如果用戶讀取與ArticleLocation = 1的文章的意思, ArticleCategory = 3和ArticleTopic = 2,那麼我想找到共享大部分相同列值的文章的前5名。

任何想法如何做到這一點?

在此先感謝

+0

大部分相同=完全相同? – 2013-03-28 08:46:46

+0

您使用的是什麼CMS?從ArticleLocation = 1,ArticleCategory = 3和ArticleTopic = 2選擇不應該困難? – Steven 2013-03-28 08:54:45

+0

不,不完全一樣。假設你有一個有3個列值的帖子,一個是2,一個是1,那麼他們應該相應地排序。 – user2218856 2013-03-28 09:21:45

回答

0

假設表被命名爲ArticleTable,請嘗試以下操作:

SELECT *, (
CASE ArticleLocation WHEN :loc THEN 1 ELSE 0 END + 
CASE ArticleTopic WHEN :topic THEN 1 ELSE 0 END + 
CASE ArticleCategory WHEN :cat THEN 1 ELSE 0 END) AS Relevance 
FROM ArticleTable 
ORDER BY Relevance DESC 
LIMIT 5 

:loc:topic:cat設定爲相關的值。

+0

非常感謝:)正是我需要的 – user2218856 2013-03-28 09:54:44