通过多个字段按名称搜索


Searching by name through multiple fields

我有一个表,除了其他信息外,还包含名称。我想搜索一个名称并获得字段"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"%…%"对于所有内容,以某种方式计算为true的条件的数量,然后按此排序,但我不知道这是否可能,也不知道如何在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;

这解决了问题中描述的问题。但是,使用全文搜索可能会更好。首先要了解的是文档。