通过多个字段按名称搜索

Searching by name through multiple fields

我有一个 table,除了其他信息外,还包含姓名。我想搜索一个名字并获取字段 'unique_id'.

可能包含名称(或名称的一部分)的字段是:

f_name1, l_name1, f_name2, l_name2, prop_name

现在假设数据库包含此条目:

unqiue_id = 1, 
f_name1   = 'Barack',
l_name1   = 'Obama', 
f_name2   = 'Michelle', 
l_name2   = 'Obama', 
prop_name = 'White House',
...

并且我在 php 中给出了这个字符串:

$q = 'Barack Obama'; //or 'Michelle' or 'White House' or ...

从该行得到 'unqiue_id' 的 sql 是多少?

SELECT unique_id FROM members WHERE (?)

我的一个想法是爆炸('',$q)并对所有内容使用 LIKE'%...%' 并以某种方式计算为真的条件的数量,然后按那个排序,但我没有'不知道这是否可能以及如何在 SQL.

中做到这一点

编辑 1:

感谢“PM 77-1”的评论,我想到了这个解决方案:

SELECT unique_id
FROM members
WHERE CONCAT( f_name1, l_name1, f_name2, l_name2, prop_name ) LIKE '%Barack%Obama%'

(在 php 中用“%”替换空格)

然而,这只有在输入字符串的顺序正确时才有效...

你可以试试这个:

select t.*
from table t
where $p like concat('%', f_name1, '%') or
      $p like concat('%', l_name1, '%') or
      $p like concat('%', f_name2, '%') or
      $p like concat('%', l_name2, '%') or
      $p like concat('%', prop_name, '%')
order by (($p like concat('%', f_name1, '%') ) +
          ($p like concat('%', l_name1, '%') ) +
          ($p like concat('%', f_name2, '%') ) +
          ($p like concat('%', l_name2, '%') ) +
          ($p like concat('%', prop_name, '%') ) desc;

这解决了问题中描述的问题。但是,您最好使用全文搜索。开始学习的地方是 documentation.