在两列中搜索单词

时间:2014-06-24 22:41:47

标签: mysql pdo

我正在处理搜索脚本,这是

我的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'。

我想要做的是能够搜索全名并获得结果。我该怎么做?

`

2 个答案:

答案 0 :(得分:1)

创建一个类似userfirst last_name的新列。把名字和姓氏放在一起。并从该栏目中搜索。

答案 1 :(得分:0)

编辑:阅读你的重写问题,这成了一个php问题。假设总是输入要搜索的名称"最后一个" (不是"最后一个"),你应该检查输入,如果它有两个或更多的单词,将第一个空格的输入分成两个变量:user_firstnameuser_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"。如果不了解您的更多要求,数据,用户群等,很难提供完整的解决方案。