2011-09-21 4 views
0

직원이 사용자 계정을 검색하는 데 사용하는 검색 양식이 있습니다. 검색 양식에서 사용자의 입력을 받아 DB에서 일치하는 사용자를 검색하려고합니다. > (. 아이디, FNAME, LNAME, IP_ADDRESS .... 등) 여기CodeIngniter 데이터베이스 검색

나는 사용자를 검색하기 위해 내 모델에서 사용하고 무엇인가 - 여기 내 DB 구조 ...

사용자 표입니다. ..

$this->db->or_like('fname', $query); 
$this->db->or_like('lname', $query); 
$this->db->or_like('email', $query); 

$this->db->or_where('ip_address', $query); 

$query = $this->db->get('users'); 

이것은 대부분의 검색에 적합합니다. 예를 들어 ....

검색 : 빌

리턴한다 이름 또는 법안의 성을 가진 모든 사용자가 .....

그러나, 성과 이름에 대한 검색은 '아무튼 일치하는 사용자가 있어도 사용자를 반환하지 않습니다. 예 ....

검색 : 검색 빌의 FNAME 게이츠의 LNAME을 사용자에게 반환하지 않습니다 빌 게이츠 (Bill Gates)

. 이 작업을하려면 어떻게해야합니까?

답변

6

검색어를 여러 개별 용어로 구분해야합니다. CI는 'bill gates'가 데이터베이스의 단일 입력란에 나타나지 않으므로

과 같이 일치하지 않는 검색어를 작성합니다. 그러나 여러 단어 (BillGates)로 분할하고 각 단어를 or 세트에 개별적으로 추가하면 일치 항목이 표시됩니다.

또 다른 옵션은 MyISAM 테이블을 사용하는 경우 청구서가 하나의 필드이고 게이트가 다른 곳에있는 경우에도 '청구서 게이트'를 찾을 수있는 3 개의 필드 전체 텍스트 색인을 사용하는 것입니다.

분명히 InnoDB에 대한 전체 텍스트 지원이 실제로 개발 파이프 라인에 포함되어 있지만 이제는 프로덕션 코드에서만 여전히 myisam입니다.

0

데이터베이스에서 이름과 성을 분리하고 or_like() 호출에 동일한 변수를 사용하므로 한 단어 만 검색 할 수 있습니다.

문자열을 ""(공백)로 분할하고 각 부분에 or_like()를 호출하거나 3 개의 입력 필드가있는 양식을 사용해야합니다 (더 좋은 아이디어가 더 있음).

관련 문제