我正在处理搜索脚本,这是
我的PHP代码:
$search_string = preg_replace("/[^A-Za-z0-9çğıöüş]/", " ", $_POST['query']);
$search_param = '%'.$search_string.'%';
// Do Search
$result_array = search_by_name($search_param); //functions
我有这样的查询:
SELECT user_id AS id,
user_firstname AS firstname,
user_lastname AS lastname,
user_profile_picture AS picture
FROM users WHERE
user_firstname LIKE :user_firstname
OR user_lastname LIKE :user_lastname
$result->bindParam(':user_firstname', $search_param, PDO::PARAM_STR);
$result->bindParam(':user_lastname', $search_param, PDO::PARAM_STR);
当您编写单词时,此查询会在user_firstname列或user_lastname列中找到它。 例如,
`user_firstname user_lastname
-------------- -------------
james wood
jimmy james
george wood
在这种情况下,如果我写'詹姆斯'到搜索区域,我会发现詹姆斯·伍兹'和吉米詹姆斯'但是,如果我写的是詹姆斯·伍德'我找不到任何东西,因为我在user_firstname列或user_lastname列中搜索它,其中不包含&james wood'。
我想要做的是能够搜索全名并获得结果。我该怎么做?
`
答案 0 :(得分:1)
创建一个类似userfirst last_name的新列。把名字和姓氏放在一起。并从该栏目中搜索。
答案 1 :(得分:0)
user_firstname
和user_lastname
。如果输入只有一个单词,请将其放入变量user_eithername
。
然后你的SQL将是:
SELECT user_id AS id,
user_firstname AS firstname,
user_lastname AS lastname,
user_profile_picture AS picture
FROM users WHERE
( user_firstname LIKE :user_firstname
AND user_lastname LIKE :user_lastname )
OR user_firstname LIKE :user_eithername
OR user_lastname LIKE :user_eithername
这大部分都会奏效,但仍然存在一些问题 - 寻找(仅限)" van Gogh"将被解释为firstname=van
lastname=Gogh
,这是不正确的。用户必须输入" Gogh",然后Like 'Gogh%'
仍然不匹配" van Gogh"。如果不了解您的更多要求,数据,用户群等,很难提供完整的解决方案。