表结构如下:
id keyword
1 中国广东省
2 广东省深圳市
3 广东省广州市
4 中国广西省
5 广西省南宁市
6 广西省桂林市
搜索广东,要求匹配广东开头的优先排在前面,包含广东的排在后面
返回结果如下:
2 广东省深圳市
3 广东省广州市
1 中国广东省
id keyword
1 中国广东省
2 广东省深圳市
3 广东省广州市
4 中国广西省
5 广西省南宁市
6 广西省桂林市
搜索广东,要求匹配广东开头的优先排在前面,包含广东的排在后面
返回结果如下:
2 广东省深圳市
3 广东省广州市
1 中国广东省
解决方案
100
试试这个:
create table tb(id int, keyword varchar(50)); insert into tb select 1 ,"中国广东省" union all select 2 ,"广东省深圳市" union all select 3 ,"广东省广州市" union all select 4 ,"中国广西省" union all select 5 ,"广西省南宁市" union all select 6 ,"广西省桂林市"; select * from tb where keyword like "%广东%" order by instr(keyword,"广东")
mysql> create table tb(id int, keyword varchar(50)); Query OK, 0 rows affected (0.44 sec) mysql> insert into tb -> select 1 ,"中国广东省" union all -> select 2 ,"广东省深圳市" union all -> select 3 ,"广东省广州市" union all -> select 4 ,"中国广西省" union all -> select 5 ,"广西省南宁市" union all -> select 6 ,"广西省桂林市"; Query OK, 6 rows affected (0.17 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql> select * -> from tb -> where keyword like "%广东%" -> order by instr(keyword,"广东"); +--+--+ | id | keyword | +--+--+ | 2 | 广东省深圳市 | | 3 | 广东省广州市 | | 1 | 中国广东省 | +--+--+ 3 rows in set (0.03 sec) mysql>