我在基于mysql中的字段对结果进行排序时遇到了困难。比方说我正在搜索“条款”这个词然后我应该得到的结果首先是“条款”,然后是“条款和”,然后是“条款和条件”等等。
任何人请使用mysql查询以有效的方式帮助根据我的要求获取搜索结果的人。
答案 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),这会产生不同。