Php 尝试使用Codeigniter搜索全名

Php 尝试使用Codeigniter搜索全名,php,codeigniter,Php,Codeigniter,这是我的桌子,如下所示 Id Firstname Lastname 1 Akhil Mokariya 2 Harshit joshi 1 Akhil Mokariya 当我搜索结果“Akhil Mokariya”时,它会给我空记录,但我需要下面这样的结果 Id Firstname Lastname 1 Akhil Mokariya 2 Harshit joshi 1 Akhil Mokariya 我的问题如下 $searcharray =

这是我的桌子,如下所示

Id  Firstname Lastname
1   Akhil     Mokariya
2   Harshit   joshi
1  Akhil Mokariya
当我搜索结果“Akhil Mokariya”时,它会给我空记录,但我需要下面这样的结果

Id  Firstname Lastname
1   Akhil     Mokariya
2   Harshit   joshi
1  Akhil Mokariya
我的问题如下

$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();

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

if( strpos( $searchterm, ' ' ) !== FALSE )
    $search_parts = explode(' ', $searchterm);
然后,您可能需要确保有两个部分:

if( count( $search_parts ) == 2 ){
    // you know you have two parts
}
这样,您就可以使用阵列中的部件:

'students.firstname' => $search_parts[0],
'students.lastname' => $search_parts[1],
如果它们可能出现故障:

'students.firstname' => $search_parts[1],
'students.lastname' => $search_parts[0],
我使用不同的方法创建查询,但为了向您展示一个示例,我执行以下操作:

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中看到这个答案:

最后看起来像这样:

// 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 "!" ) ';
}
因此,在你的情况下,我认为你应该能够做到:

$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
);

看起来你有几个表,但你只提供了一个。是的,它是多表联接,但我用名字和姓氏concate搜索。@Magnus Eriksson不清楚,你在说什么?$searchterm包含什么值?@Parnasree Chowdhury是“Akhil Mokariya”如何在我的情况下放置上述查询。我更新了答案。在我的服务器上进行了测试,并使用了或_like()。