0

这是关于在数据库中搜索关键字,正好在表users中搜索关键字,同时针对排名/分数对用户名称和他的电子邮件地址进行不同的加权。
这不应该是全文搜索,所以这里是我的方法:在参考表中使用类似表达式的MySQL

我想在关键字“约翰”整个数据库进行搜索,它也必须返回约翰,例如“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用的cols idname

怎么可能寻找小猫的名字,以及和加权,这样的:关键字是小猫的名字,然后给这个用户的得分加1

select [...] + SUM [ (u's kitten's name like %john%)*1] ) as score

如澄清:

username, email,   (his/her kittens); score 
john,  [email protected], (johna, myjohn);  5+3+1+1 (user matches, mail matches, two kittens match) 
linda, [email protected], (myjohn);   0+3+1 (user doesn't match, mail matches, one kitten matches) 

Btw。在教条中使用这个是目的,但是纯粹的本地MySql也是非常充分的。

回答

0

我不知道你的实际需求是什么。但我认为我可以引导你走向正确的..

select u.id,u.name,(if(u.name LIKE '%john%', 5, 0) + if(u.mail LIKE '%john%', 3, 0)) as score 

试试这个

+0

这已经工作,请阅读整个问题。 它也是在被引用表“kitten”中搜索字符串“john”。 – croma 2015-03-03 09:42:46

+0

@croma,你能否清楚地提供你的表格结构 – 2015-03-03 11:30:33

+0

这个结构就像一个m2m关系一样简单,所以它具有'id','name'和'id'的小猫,'id',''name就像问题中提到的那样。引用表称为'user_has_kittens'。 我想,在查询中必须存在一些堆叠或嵌套的“SELECT”,从而循环每个用户通过所有的小猫。也许......与'Group_CONCAT' – croma 2015-03-03 11:38:01