Fra*_*ser 9 mysql sql-order-by
我有一个搜索表单,搜索网站内容表以取回适当的结果.
我想搜索标题和内容字段,并按相关性顺序拉回结果.给予标题最高优先级.
假设我们有一个表(tblContent)
intID | strTitle | txtContent
1 | Smith John | Lorem Ipsum
2 | Lorem Ipsum | Lorem John Smith Ipsum
3 | John Smith | Lorem Ipsum Lorem Ipsum
4 | Lorem Ipsum | Lorem Ipsum Lorem Ipsum
5 | Lorem Ipsum | Lorem Ipsum Smith John
Run Code Online (Sandbox Code Playgroud)
而你正在寻找"约翰史密斯",结果应该以3,2,1,5的顺序返回
这怎么可能?
Fra*_*ser 19
我设法得到了相当的信息:
SELECT *,
( (1.3 * (MATCH(strTitle) AGAINST ('+john+smith' IN BOOLEAN MODE))) + (0.6 * (MATCH(txtContent) AGAINST ('+john+smith' IN BOOLEAN MODE)))) AS relevance
FROM content
WHERE (MATCH(strTitle,txtContent) AGAINST ('+john+smith' IN BOOLEAN MODE) )
ORDER BY relevance DESC
Run Code Online (Sandbox Code Playgroud)
mysql 全文搜索是个好东西,但它有最少 4 个字符的索引单词的限制。尽管可以更改限制,但并非在所有情况下都可以更改服务器变量。在这种情况下,我建议按案例顺序建议的解决方案
select
*
from
mytable a
WHERE
(a.title like 'somthing%'
OR a.title like '%somthing%'
OR a.title like 'somthing%')
ORDER BY case
WHEN a.title LIKE 'somthing%' THEN 1
WHEN a.title LIKE '%somthing%' THEN 2
WHEN a.title LIKE '%somthing' THEN 3
ELSE 4 END;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11919 次 |
| 最近记录: |