2010-08-29 61 views
14

我環顧四周,想知道如何去創建一個相關或類似的帖子來顯示在我的網站上使用PHP & MySQL?如何做到這一點的基本例子是什麼?使用PHP和MySQL創建相關或類似的帖子

+0

你需要更具體的限制。你有什麼樣的數據,你如何定義一個「類似的職位」? – casablanca 2010-08-29 03:52:20

+0

@casablanca我有標題,類別和帖子,標題和正文內容,如果這是你正在採取的? – leftout 2010-08-29 03:56:50

回答

27

使用MySQL全文搜索MATCH (col1,col2,...) AGAINST (expr [search_modifier])的事情。

假設您的表格爲articles,您需要查找關於當前帖子標題的相關帖子。這樣做:

SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score 
FROM articles 
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle') 
ORDER BY score DESC LIMIT 5 

這會給你前5個相關的職位。

但是首先記得要啓用全文搜索該表的列,通過運行該查詢:

ALTER TABLE articles ADD FULLTEXT (title, body); 

[編輯]:爲什麼不使用LIKE澄清到OP:

因爲它不會給出正確的結果。假設您目前的標題是「1980年的音樂」,並且您希望在其上發佈相關帖子。現在,如果您使用LIKE,則只會顯示包含「1980年音樂」單詞序列的帖子。但是,如果您使用MATCH ... AGAINST,則會顯示包含Music OR 1980的帖子。此外,同時包含Music和1980的帖子將顯示在Top上,因爲它會爲每個結果提供一個SCORE,並且我們按該分數排序。我希望這一點很清楚。

[編輯]:2

如果你有類別,你可以在SQL查詢where clause添加AND Category = '$CurrentCategory'獲得更具體的結果。

[編輯]:3:OP不能使用全文

如果您不能使用全文(出於某種原因),則可以只顯示來自同一類別的5分隨機的帖子。由於他們是在同一類別中,他們已經在某種程度上至少涉及:

SELECT * 
FROM articles 
WHERE Category = '$CurrentCategory' 
LIMIT 5 

編輯語法:改變LIMTI在MySQL代碼

+0

我可以使用LIKE而不是FULLTEXT嗎? – leftout 2010-08-29 04:01:10

+0

@leftout,我已經更新了答案。 – shamittomar 2010-08-29 04:10:17

+0

但是,如果我不能使用FULLTEXT搜索抱歉所有的問題。 – leftout 2010-08-29 04:14:38