2011-10-03 137 views
1

我正在PHP/mySQL中創建搜索功能。根據關鍵字外觀排名搜索結果

我需要能夠在多個字段中搜索多個關鍵字,然後根據關鍵字的匹配程度以及關鍵字匹配的位置對結果進行排名(例如,比較關鍵字時出現在post_title到POST_CONTENT,所有其他的事情都是平等的。

然後我需要它回落到上升的發佈日期,所有其他的事情都是平等的。

理想情況下,我可以在MySQL查詢做到這一點。有什麼方法對我有用嗎?

+0

您是否使用全文索引? –

+0

我不知道,我使用的是一個wordpress數據庫 –

+1

可能不會,它會使用innodb表,然後他們還不支持全文索引。那麼你必須寫出你的排名。全文索引爲你提供'免費'。 –

回答

1

如果您使用MyISAM,您可以在您的t上設置全文索引分機字段。

看到這個問題的HOWTO:Keyword search using PHP MySql?

現在,你可以做一個查詢:

SELECT 
    MATCH(`data`) AGAINST('word1 word2 word3') AS relevance 
    , field1 
    , field2 
FROM table1 
WHERE MATCH(`data`) AGAINST('word1 word2 word3') 
ORDER BY relevance DESC 

可以重複MATCH AGAINST子句中你的選擇,它會給你一個relevence數。
您需要在您的where子句中重述它。但幸運的是,您可以在您的group byhavingorder by子句中使用別名。

+0

它說全文必須在創建表格時打開,有沒有辦法解決這個問題? –

+0

當然不是,如何在沒有全文索引的表上進行全文搜索。做一個'alter table add index ....'來添加全文索引。 – Johan

+0

對不起,所以我可以在創建表後添加索引? –