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