这是关于在数据库中精确地在表users
中搜索关键字,同时根据排名/分数对用户名和电子邮件地址进行不同的加权
这不应该是关于全文搜索,所以这里是我的方法:
我想在整个数据库中搜索关键字"john",它还将返回john,例如"johna",加上名称的权重应大于电子邮件地址:
select u.id,u.name,((u.name LIKE '%john%')*5 + (u.mail LIKE '%john%')*3) as score
from users u
having score > 0
order by score desc
假设有一个表user_has_kittens
:
user_id kitten_id
------------------
1 1
1 2
1 3
1 4
2 3
2 42
您已经看到了这个表的用途:它定义了哪个用户拥有哪个小猫,当然您可以拥有任意数量的小猫。
此外,小猫的名字在kittens
表中,列为id
、name
如何搜索小猫的名字并像这样加权:关键字在小猫的名字中,然后给这个用户加1分。
伪select [...] + SUM [ ( u's kitten's name like %john% )*1] ) as score
例如澄清:
username, email, (his/her kittens); score
john, john@example.org, (johna, myjohn); 5+3+1+1 (user matches, mail matches, two kittens match)
linda, linda@john.org, (myjohn); 0+3+1 (user doesn't match, mail matches, one kitten matches)
Btw。在条令中使用这一点是目的,然而普通的本地MySql也足够了。
我不知道你的实际需求是什么。但我想我可以指引你向右走。。
select u.id,u.name,( if(u.name LIKE '%john%', 5, 0) + if(u.mail LIKE '%john%', 3, 0)) as score
试试这个