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