【发布时间】:2015-03-03 09:01:09
【问题描述】:
这是关于在数据库中搜索关键字,精确地在表 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)
顺便说一句。在教义中使用它是目的,但是简单的原生 MySql 也非常足够。
【问题讨论】:
标签: mysql database doctrine-orm many-to-many foreign-key-relationship