2013-11-21 38 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。请注意,这个查询不会很快,因为它不能使用索引。