MySQL在引用的表中使用类似的表达式



这是关于在数据库中精确地在表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表中,列为idname

如何搜索小猫的名字并像这样加权:关键字在小猫的名字中,然后给这个用户加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

试试这个

相关内容

  • 没有找到相关文章

最新更新