多个关键字,根据包含的关键字个数从多到少排列。
即将包含关键字多的记录放在前面,包含少的关键字放在后面,不包含关键字的则不显示。比如一个表包含学号、姓名、性别、出生年月、籍贯、专业、学院等等信息。
现在输入多个关键字如"江苏省 女 1990年"则将同时包含3个关键字的放在最前,包含2个关键字的其次,只包含1个关键字的放最后。另外,要求结果除了按照包含的关键字降序排列的同时再按学号升序排列。jsp+servlet学生信息查询系统小结:可见http://blog.youkuaiyun.com/prstaxy/article/details/7874294
对每条记录计算匹配的关键字的个数,由于每次关键字动态变化,可在程序中用代码控制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年”时,检索出的结果: