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 id
,name
怎么可能寻找小猫的名字,以及和加权,这样的:关键字是小猫的名字,然后给这个用户的得分加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也是非常充分的。
这已经工作,请阅读整个问题。 它也是在被引用表“kitten”中搜索字符串“john”。 – croma 2015-03-03 09:42:46
@croma,你能否清楚地提供你的表格结构 – 2015-03-03 11:30:33
这个结构就像一个m2m关系一样简单,所以它具有'id','name'和'id'的小猫,'id',''name就像问题中提到的那样。引用表称为'user_has_kittens'。 我想,在查询中必须存在一些堆叠或嵌套的“SELECT”,从而循环每个用户通过所有的小猫。也许......与'Group_CONCAT' – croma 2015-03-03 11:38:01