【问题标题】:Mysql: search fullname in a splitted name tableMysql:在拆分的名称表中搜索全名
【发布时间】:2023-08-04 04:49:01
【问题描述】:

我正在寻找一种可以在拆分的列表中查找全名的方法

我试过了:例如“michael peter johnson”

select firstName,middleName,lastName 
from staff 
where concat(firstName, ' ', middlename, ' ', lastname) Like "%michael peter johnson%"

可以,但如果名称是 "michael johnson" 它不起作用,因为创建了 concat 名称:"michael (double space)johnson" 所以 concat 创建了两个空格并且不匹配。

有没有人知道另一种方法来解决这个问题?

编辑:想法是字符串“michael peter johnson”是一个用户输入字段。所以它不能分成 3 个单独的字符串,这不是这个搜索栏的想法

Edit2:我还注意到,如果中间名是“NULL”,并且带有 NU:: 的 concat(firstName, ' ', middlename, ' ', lastname) 的结果是 NULL,所以它永远不会找到它。

有什么解决办法吗?

谢谢 马蒂

【问题讨论】:

    标签: php mysql string concatenation concat


    【解决方案1】:

    可能不是最有效的解决方案,但应该可以满足您的要求:

    select firstName, midlename, lastname 
    from staff
    where replace(concat(ifnull(firstName, ''), ifnull(middlename, ''), ifnull(lastname, '')), ' ', '') = replace('michael peter johnson', ' ', '');
    

    【讨论】:

      【解决方案2】:

      如果你和 michael johnson 一起搜索。这样做

           select name, midle, last 
           from staff
           where concat(name, ' ', midle, ' ', last) Like "%michael%johnson%"
      

      在这里demo

      编辑:

       select firstName,middleName,lastName 
       from table1
       where (firstName Like "%michael%" AND lastName  LIKE "%johnson%" )
      

      【讨论】:

      • 谢谢!它可能会起作用,它不是针对 NULL 问题的,请参阅“编辑 2”
      【解决方案3】:

      你可以这样做:

      select firstName, middleName, lastName 
      from staff 
      where concat(firstName, ' ', middlename, ' ', lastname) Like "%michael%peter%johnson%"
      

      但我认为你想要:

      select firstName, middleName, lastName 
      from staff 
      where firstName like '%michael%' and
            middleName like '%peter%' and
            lastName like '%johnson%';
      

      或者因为您的数据库值似乎有空格,也许只是:

      select firstName, middleName, lastName 
      from staff 
      where trim(firstName) = 'Michael' and
            trim(middleName) = 'Peter' and
            trim (lastName) = 'Johnson';
      

      编辑:

      或者,你可以这样做:

      where concat(trim(firstName), ' ', trim(middlename), ' ', trim(lastname)) Like concat('%', 'michael peter johnson', '%')
      

      【讨论】:

      • 问题在于“michael peter johnson”是用户输入字符串。因此它需要在包含树名的表中查找全名
      • thanx 第一个可能会起作用,它不是因为 NULL 问题,请参阅“编辑 2”
      【解决方案4】:

      Replace 是另一种选择:

      select firstName,middleName,lastName 
      from staff 
      where replace(concat(firstName, ' ', middlename, ' ', lastname), '  ', ' ') Like "%michael peter johnson%"
      

      【讨论】: