我有一张表,除了其他信息外,还包含名称。我想搜索名称并获取字段'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)
但是,这仅在输入字符串的顺序正确时才有效...
答案 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。