2011-07-18 40 views
3

我是一個社區驅動的網站開發者/設計者:http://www.thegamesdb.net如何提高網站的名稱搜索結果

我們的問題是相當簡單:

Pac-Man的是遊戲在網站上。一個人應該能夠搜索「pacman」或「pac man」,並且應該顯示「Pac-Man」結果。目前,這不會發生。

搜索代碼片段如下,但完整的代碼可以看出:http://code.google.com/p/thegamesdb/source/browse/trunk/tab_listseries.php

if ($function == 'Search') 
{ 
    $query = "SELECT g.*, p.name FROM games as g, platforms as p WHERE GameTitle LIKE '%$string%' and g.Platform = p.id"; 
    if(!empty($sortBy)) 
    { 
    $query .= " ORDER BY $sortBy, GameTitle ASC"; 
    } 
    else 
    { 
    $query .= " ORDER BY GameTitle"; 
    } 
} 

我沒那麼熟悉編碼搜索技術,因此任何幫助,將不勝感激。我已經試過在網上搜索,我發現的只是一些預製的網站搜索引擎。我們並不想走這條路......這對我們的需求有點矯枉過正。

期待一些討論,

亞歷

回答

1

MySQL有一個名爲SOUNDS LIKE的字符串比較功能。這可能是一個很好的用例。

http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#operator_sounds-like

你可能修改像這樣:

SELECT * FROM blah WHERE SOUNDEX(column) LIKE CONCAT('%', SOUNDEX($search_string), '%') 
+0

SOUNDEX基本消除空白,元音和重複是彼此相鄰的字母。 – dqhendricks

+0

感謝你,這是一個完美的,輕量級的解決方案,我們的問題,並將現在很好地工作:) 在閱讀蘭迪的帖子後,我有一個玩Atomboys Double metaphone mysql函數....但它只是導致我的開發服務器墜毀。 這是一個很好的無憂解決方案,符合我們現有的代碼。 – flexage

+0

@flexage很高興我能幫忙! – dqhendricks

0

最終,你將需要決定如何執行模糊匹配。

對於您的示例 - 您可能會考慮刪除所有空格和任何' - '字符 - 然後執行like '%$string%' match。您可能還會在LIKE的兩側考慮UPPER

你可以用自己的方式做更多或更少的決定模糊性的方法。

相關問題