我有一个表,除了其他信息外,还包含名称。我想搜索一个名称并获得字段"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;
这解决了问题中描述的问题。但是,使用全文搜索可能会更好。首先要了解的是文档。