基于LIKE条件的MySql中的ORDER BY

时间:2013-08-13 14:16:57

标签: mysql

我在基于mysql中的字段对结果进行排序时遇到了困难。比方说我正在搜索“条款”这个词然后我应该得到的结果首先是“条款”,然后是“条款和”,然后是“条款和条件”等等。

任何人请使用mysql查询以有效的方式帮助根据我的要求获取搜索结果的人。

4 个答案:

答案 0 :(得分:1)

SELECT * FROM your_table WHERE your_column LIKE "Terms%" ORDER BY your_column;

答案 1 :(得分:0)

您正在寻找全文搜索。下面是一个非常简单的例子

SELECT id,name MATCH (name) AGAINST ('string' > 'string*' IN BOOLEAN MODE) AS score 
FROM tablename WHERE MATCH (name) AGAINST ('string' > 'string*' IN BOOLEAN MODE)
ORDER BY score DESC

这样做的好处是可以控制单词的值。这是非常基本的,你可以“举起”某些比赛或单词(或'向下') 在我的示例中,完全匹配('string')的得分高于带有附加内容的字符串('string*')。以下几行甚至更广泛一步:

'string' > 'string*' > '*string*'

This documentation about fulltextsearch解释了分配。这是一个很长的阅读,但值得并完成。

答案 2 :(得分:0)

基于存储引擎和mysql版本,您可能可以使用MySQL的全文搜索功能。例如:

SELECT *, MATCH (your_column) AGAINST ('Terms' IN BOOLEAN MODE) AS relevance
FROM your_table 
WHERE MATCH (your_column) AGAINST ('Terms' IN BOOLEAN MODE)
ORDER BY relevance

您可以在此处找到更多信息:http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

或者,如果您不希望FTS成为另一种可能的解决方案,其中排序严格基于字符串的长度(差异)。

SELECT * FROM your_table WHERE your_column LIKE "Terms%" ORDER BY ABS(LENGTH(your_column) - LENGTH('Terms'));

答案 3 :(得分:0)

如果搜索前缀字符串,请勿使用全文索引!

使用LIKE "Term%"优化程序将能够在your_column上使用潜在索引:

SELECT * FROM your_table 
   WHERE your_column LIKE "Terms%" 
   ORDER BY CHAR_LENGTH(your_column),your_column

注意ORDER BY子句:它首先按字符串长度排序,并且只使用alphabetcal命令对相等长度的字符串进行排序。

请使用CHAR_LENGTH而不是LENGTH作为第一个计算字符数,而后计数字节数。使用变量长度编码(如utf8),这会产生不同。