使用全名搜索,而不仅仅是名字或姓氏

时间:2011-09-08 14:25:34

标签: php sql codeigniter

我正在开发一个用PHP和Codeigniter构建的API,我使用MySQL作为数据库。

我有一个名为Users的用户表,其中包含以下列:

- ID
- Firstname
- Lastname
- Email

用户如何使用全名搜索此表?例如,它可以通过Martin或Smith搜索,但不能搜索Martin Smith。

这是我现在使用的查询:

$this->db->select('*');
$this->db->from('users');
$this->db->like('firstname', $args['query']);
$this->db->or_like('lastname', $args['query']);

更新

如果我按照下面的建议使用此查询,我找不到任何内容。没有全名,名字或姓氏。然后,名字和姓氏都必须是同一个单词。

$this->db->select('*');
$this->db->from('users');
$this->db->like('firstname', $args['query']);
$this->db->like('lastname', $args['query']);

6 个答案:

答案 0 :(得分:2)

直接离开我的脑袋,但是呢?

$input = 'Martin Smith';

$names = explode($input);

$this->db->select('*'); 
$this->db->from('users'); 
$this->db->where_in('firstname', $names); 
$this->db->or_where_in('lastname', $names);

应输出如下内容:

SELECT * FROM users 
WHERE firstname IN ('Martin', 'Smith') 
OR lastname IN ('Martin', 'Smith')

答案 1 :(得分:1)

尝试:

$this->db->select('*');
$this->db->from('users');
$this->db->like('firstname', $args['first_name']);
$this->db->like('lastname', $args['last_name']);

这导致:

Select * from users
WHERE firstname LIKE '%first_name%' 
AND lastname LIKE '%last_name%

答案 2 :(得分:0)

更改:$this->db->or_like('lastname', $args['query']);

收件人:$this->db->like('lastname', $args['query']);

答案 3 :(得分:0)

你需要为AND改变那个OR:

SELECT * FROM users WHERE Firstname = '$firstname' AND Lastname = '$lastname'

答案 4 :(得分:0)

我这样做并为我工作正常:

$terms = explode(' ', $searchtxtusername); 
if(count($terms)>1){
    $this->db->like('u.first_name', $this->db->escape_like_str($terms[0]));
    $this->db->like('u.last_name', $this->db->escape_like_str($terms[1]));
}else{
    $this->db->like('u.first_name', $this->db->escape_like_str($terms[0]));
    $this->db->or_like('u.last_name', $this->db->escape_like_str($terms[0]));
}

此处,$ searchtxtusername是包含名字和姓氏(空格分隔)的搜索词。如果只有一个术语,则它会检查同名术语的名字和姓氏。

示例:如果我搜索了Bob,那么搜索条件就像:

first_name LIKE '%Bob%' 
AND last_name LIKE '%Bob%'

如果我搜索Bob Beggins,则搜索条件变为:

first_name LIKE '%Bob%' 
AND last_name LIKE '%Beggins%'

答案 5 :(得分:0)

if($data['keyword'] != ''){
   $this->db->like('CONCAT(First_Name, " ", Last_Name," ")', $data['keyword']);
}