1. 程式人生 > >多關鍵字查詢並根據匹配程度排序

多關鍵字查詢並根據匹配程度排序

多個關鍵字,根據包含的關鍵字個數從多到少排列。

即將包含關鍵字多的記錄放在前面,包含少的關鍵字放在後面,不包含關鍵字的則不顯示。比如一個表包含學號、姓名、性別、出生年月、籍貫、專業、學院等等資訊。

現在輸入多個關鍵字如"江蘇省 女 1990年"則將同時包含3個關鍵字的放在最前,包含2個關鍵字的其次,只包含1個關鍵字的放最後。另外,要求結果除了按照包含的關鍵字降序排列的同時再按學號升序排列。
實現方法:
對每條記錄計算匹配的關鍵字的個數,由於每次關鍵字動態變化,可在程式中用程式碼控制sum函式中的計算內容

cnt記錄包含的關鍵字個數,最後根據cnt降序,同時根據id升序排列。

另外,Andriod中的sqlite不支援instr函式,可以用like

函式,如:like('%1989年%',info)>0

select *
from(select id,sex,birthyear,address,major,sum(
(case when instr(info,'江蘇省')>0 then 1 else 0 end)
+(case when instr(info,'女')>0 then 1 else 0 end)
+(case when instr(info,'1990年')>0 then 1 else 0 end)
)
as cnt from master group by id) as temp
where cnt>0
order by cnt desc,id asc

測試過程如下:

原始資料的一部分欄位如下:


當關鍵字是“江蘇省 女 1990年”時,檢索出的結果: