2013-11-21 35 views

回答

0

嘗試使用LOCATE函數,該函數在發現大海撈針時返回第一個字符位置。你可以這樣做,對於每個條款與IF > 0 THEN...

SELECT * FROM tablename 
ORDER BY 
    (
    IF(LOCATE('hell', field_to_search) > 0, 1, 0) 
    + IF(LOCATE('llo', field_to_search) > 0, 1, 0) 
    + IF(LOCATE('hl', field_to_search) > 0, 1, 0) 
    + IF(LOCATE('lh', field_to_search) > 0, 1, 0) 
    ) DESC 

如果field_to_search包含(不區分大小寫的情況下),所有四個方面,它將在外地的順序有4個,和零,如果它不匹配任何等等。這不會限制你的結果,如WHERE field_to_search LIKE '%hell%'

使用IF(LOCATE結構還可以讓你給不同的權重不同的搜索詞,例如如果它匹配hell,你可能會給它4分,​​可能會給它3.因此,理論上它可以匹配hllh,但不是hell或​​,並且仍然會出現在與前兩個​​匹配的項之上(如果您將最低的兩個比頂等)。

文檔:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_locate

0

你可能有一些運氣fulltext indexes

+0

鏈接是好的(這是全文搜索),但這裏的描述是非常有限的。 YOu可能需要使用全文搜索功能('MATCH ... AGAINST ... 1語法),這需要針對匹配列的全文索引。 –

0

我認爲你正在尋找的東西是這樣的:

SELECT words.* 
FROM words 
WHERE 'hello' LIKE CONCAT('%', word, '%') 
ORDER BY 
    LENGTH(word) DESC 

請參閱小提琴here。請注意,這個查詢不會很快,因爲它不能使用索引。