회원 검색할때 초성으로도 가능하게

회원 검색할때 초성으로도 가능하게

QA

회원 검색할때 초성으로도 가능하게

답변 2

본문

지금 레벨6인 회원들만 볼수있는 게시판을 만들어서 사용중인데

회원수가 점점 많아지니 검색기능을 추가하여 사용하고 있었는데

원래 기존 회원아이디, 이름을 검색하여 해당 회원을 보여지게 하고있었습니다.

근데 혹시 이름초성이나 생년월일? 같은걸로도 불러오게 할수있는지 궁금합니다!

 

if($search_id){

$search = "and mb_id = '$search_id' or mb_name = '$search_id' ";

};

 

현재 위에 코드로 검색기능을 구현하고 있습니다!!

이 질문에 댓글 쓰기 :

답변 2

// 초성은 대충 이렇게 하면 나오지 않을가 싶은데요


if($search_id){
    $search = [];
    $search[] = "mb_id = '$search_id'";
    $search[] = "mb_name = '$search_id' ";
 
    switch($search_id){
        case'ㄱ':    
            $search[]   =   " (mb_name RLIKE '^(ㄱ|ㄲ)' OR ( mb_name >= '가' AND mb_name < '나' ))";    
            break;
        case'ㄴ':    
            $search[]   =   " (mb_name RLIKE '^ㄴ' OR ( mb_name >= '나' AND mb_name < '다' ))";    
            break;
        case'ㄷ':    
            $search[]   =   " (mb_name RLIKE '^(ㄷ|ㄸ)' OR ( mb_name >= '다' AND mb_name < '라' ))";    
            break;
        case'ㄹ':    
            $search[]   =   " (mb_name RLIKE '^ㄹ' OR ( mb_name >= '라' AND mb_name < '마' ))";    
            break;
        case'ㅁ':    
            $search[]   =   " (mb_name RLIKE '^ㅁ' OR ( mb_name >= '마' AND mb_name < '바' ))";    
            break;
        case'ㅂ':    
            $search[]   =   " (mb_name RLIKE '^ㅂ' OR ( mb_name >= '바' AND mb_name < '사' ))";    
            break;
        case'ㅅ':    
            $search[]   =   " (mb_name RLIKE '^(ㅅ|ㅆ)' OR ( mb_name >= '사' AND mb_name < '아' ))";    
            break;
        case'ㅇ':    
            $search[]   =   " (mb_name RLIKE '^ㅇ' OR ( mb_name >= '아' AND mb_name < '자' ))";    
            break;
        case'ㅈ':    
            $search[]   =   " (mb_name RLIKE '^(ㅈ|ㅉ)' OR ( mb_name >= '자' AND mb_name < '차' ))";    
            break;
        case'ㅊ':    
            $search[]   =   " (mb_name RLIKE '^ㅊ' OR ( mb_name >= '차' AND mb_name < '카' ))";    
            break;
        case'ㅋ':    
            $search[]   =   " (mb_name RLIKE '^ㅋ' OR ( mb_name >= '카' AND mb_name < '타' ))";    
            break;
        case'ㅌ':    
            $search[]   =   " (mb_name RLIKE '^ㅌ' OR ( mb_name >= '타' AND mb_name < '파' ))";    
            break;
        case'ㅍ':    
            $search[]   =   " (mb_name RLIKE '^ㅍ' OR ( mb_name >= '파' AND mb_name < '하' ))";    
            break;
        case'ㅎ':    
            $search[]   =   " (mb_name RLIKE '^ㅎ' OR ( mb_name >= '하'))";  
            break;
    }
 
    $query = implode(" and ", $search);
};

제가 댓글 드렸지만 지금 소스 다시 보니  저 소스로 하면 안나오는게 맞을듯해요
저 대로 하면 쿼리문이
검색어가 ㄱ 초성이다 하면
mb_id = 'ㄱ' and mb_name ='ㄱ' and  (mb_name RLIKE '^(ㄱ|ㄲ)' OR ( mb_name >= '가' AND mb_name < '나' ))
위처럼 될테니 안되겠네요
쿼리문 중간을 OR로 변경 응용해서 해보세요

 

$search = "and mb_id = '$search_id' or mb_name = '$search_id' ";

$search = "and (mb_id = '$search_id' or mb_name = '$search_id' )";

또는

$search = "and  '$search_id' in ( mb_name , mb_id) ";

로 하셔야 합니다

 

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 2,432
© SIRSOFT
현재 페이지 제일 처음으로