通过多个字段按名称搜索
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.
我有一个 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.