查出数据库表中字段1或字段2中能够匹配到关键字key的数据,想优先显示字段1中匹配的数据

项目中想要优化一个mysql模糊查询的功能:
业务场景:查出数据库表中字段1或字段2中能够匹配到关键字key的数据,优先显示字段1中匹配的,但是字段2中能够匹配的记录也要显示;
现状:我用的mysql concat(str1, str2)的函数,这样虽然能查询出所有匹配的结果,但是不能按优先级让匹配字段1的先展示。

SQL的话先查字段一然后union all 字段二不行吗,不然整elasticsearch检索打分

问题有点模糊,先确认几个点。

  1. 你想展示的数据是不是匹配到的字段1或者字段2的值,而非匹配到的这一整行?
  2. 当字段2中有值时,字段1是为空还是有值?
  3. 如果某行字段1和字段2同时匹配,你是想显示一条记录还是两条记录?如果是一条记录的话,你是想只显示字段1中的值?
  4. 字段1中是否存在能匹配到多条记录的情况?匹配到多条是同时展示?
  5. 你匹配条件是用的是等于还是like?

我先猜一下,给个sql

select  case when 字段1 like '%KEY%' then 字段1 when 字段2 like '%KEY%'  then 字段2 end 
fromwhere (字段1  like '%KEY%' or 字段2 like '%KEY%');

条件没有用concat的原因是,因为不清楚你数据长啥样,怕字段1的后半截和字段2的前半截组合后刚好和key相似,因此分别写条件。而展示的数据,case when 完美的诠释了优先级的用法

sql 语句大概是这个样子
select ab.field2 ,ab.field5,ab.fieldn,... from ( select 1 as k , ablName.* from ablName where field1 like key UNION select 2 as k , ablName.* from ablName where (not (field1 like key)) and (field2 like key )) as ab ORDER BY ab.k;

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632