首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试使用Codeigniter以全名进行搜索

尝试使用Codeigniter以全名进行搜索
EN

Stack Overflow用户
提问于 2018-02-19 14:40:13
回答 1查看 1K关注 0票数 1

这是我的表格,如下所示。

代码语言:javascript
运行
复制
Id  Firstname Lastname
1   Akhil     Mokariya
2   Harshit   joshi

当我搜索结果"Akhil Mokariya“时,它给我的记录为空,但我需要如下结果。

代码语言:javascript
运行
复制
1  Akhil Mokariya

我的查询如下所示。

代码语言:javascript
运行
复制
$searcharray = array(
            'students.firstname' => $searchterm,
            'students.lastname' => $searchterm,
            'students.guardian_name' => $searchterm,
            'students.adhar_no' => $searchterm,
            'students.samagra_id' => $searchterm,
            'students.roll_no' => $searchterm,
            'students.admission_no' => $searchterm,
        );

        $this->db->select('classes.id AS `class_id`,students.id,classes.class,sections.id AS `section_id`,sections.section,students.id,students.admission_no , students.roll_no,students.admission_date,students.firstname,  students.lastname,students.image,    students.mobileno, students.email ,students.state ,   students.city , students.pincode ,     students.religion,     students.dob ,students.current_address,    students.permanent_address,IFNULL(students.category_id, 0) as `category_id`,IFNULL(categories.category, "") as `category`,      students.adhar_no,students.samagra_id,students.bank_account_no,students.bank_name, students.ifsc_code ,students.father_name , students.guardian_name , students.guardian_relation,students.guardian_phone,students.guardian_address,students.is_active ,students.created_at ,students.updated_at,students.gender,students.rte,student_session.session_id')->from('students');
        $this->db->join('student_session', 'student_session.student_id = students.id');
        $this->db->join('classes', 'student_session.class_id = classes.id');
        $this->db->join('sections', 'sections.id = student_session.section_id');
        $this->db->join('categories', 'students.category_id = categories.id', 'left');
        $this->db->where('student_session.session_id', $this->current_session);
        $this->db->group_start();
        $this->db->or_like($searcharray);
        $this->db->group_end();
        $this->db->order_by('students.id');
        // $this->db->limit('100');
        $query = $this->db->get();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-19 15:35:19

我在自己的搜索中发现,我将检查搜索是否为包含空格的字符串,因此我可以将其拆分,并将其用作名字和姓氏:

代码语言:javascript
运行
复制
if( strpos( $searchterm, ' ' ) !== FALSE )
    $search_parts = explode(' ', $searchterm);

然后,您可能希望确保其中包含两个部分:

代码语言:javascript
运行
复制
if( count( $search_parts ) == 2 ){
    // you know you have two parts
}

这样你就可以使用数组中的部分了:

代码语言:javascript
运行
复制
'students.firstname' => $search_parts[0],
'students.lastname' => $search_parts[1],

如果它们可能出现故障:

代码语言:javascript
运行
复制
'students.firstname' => $search_parts[1],
'students.lastname' => $search_parts[0],

我使用了一种不同的方法来创建查询,但为了向您展示一个示例,我这样做:

代码语言:javascript
运行
复制
if( strpos( $search, ' ' ) !== FALSE )
{
    $search_parts = explode(' ', $search);

    $sql .= ' 
        OR (
            first_name LIKE "%' . $this->db->escape_like_str( current($search_parts) ) . '%" ESCAPE "!" AND  
            last_name LIKE "%' . $this->db->escape_like_str( end($search_parts) ). '%" ESCAPE "!"
        ) ';

    reset($search_parts);

    $sql .= ' 
        OR (
            last_name LIKE "%' . $this->db->escape_like_str( current($search_parts) ) . '%" ESCAPE "!" AND 
            first_name LIKE "%' . $this->db->escape_like_str( end($search_parts) ). '%" ESCAPE "!"
        ) 
    ';
}

此外,如果您不关心代码的可移植性,您应该使用CONCAT:Mysql Concat two columns while searching with LIKE查看答案

它最终看起来像这样:

代码语言:javascript
运行
复制
// Check if search was input as full name
if( strpos( $search, ' ' ) !== FALSE )
{
    $sql .= ' 
        OR ( CONCAT( first_name, " ", last_name ) LIKE "%' . $this->db->escape_like_str( $search ) . '%" ESCAPE "!" )  
        OR ( CONCAT( last_name, " ", first_name ) LIKE "%' . $this->db->escape_like_str( $search ) . '%" ESCAPE "!" ) ';
}

因此,在您的情况下,我认为您应该能够这样做:

代码语言:javascript
运行
复制
$searcharray = array(
    'students.firstname' => $searchterm,
    'students.lastname' => $searchterm,
    'students.guardian_name' => $searchterm,
    'students.adhar_no' => $searchterm,
    'students.samagra_id' => $searchterm,
    'students.roll_no' => $searchterm,
    'students.admission_no' => $searchterm,
    'CONCAT(students.firstname, " ", students.lastname)' => $searchterm,
    'CONCAT(students.lastname, " ", students.firstname)' => $searchterm
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48860749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档