通过多个字段按名称搜索

时间:2015-04-08 01:06:39

标签: php mysql sql

我有一张表,除了其他信息外,还包含名称。我想搜索名称并获取字段'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'%...%'来表示一切,并以某种方式计算真实的条件数,然后按ORDER BY但我不知道如果可能的话,如果在SQL中如何做到这一点。

EDIT1:

由于'PM 77-1的评论:

,我想出了这个解决方案
SELECT unique_id
FROM members
WHERE CONCAT( f_name1, l_name1, f_name2, l_name2, prop_name ) LIKE '%Barack%Obama%'

(在php中用'%'替换white-spaces)

但是,这仅在输入字符串的顺序正确时才有效...

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

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