我正在开发一个用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']);
答案 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']);
}