2013-04-22 99 views
0

我有一個搜索功能,可以通過數據庫表中的不同條件進行搜索。 這裏是一些數據帶有多字段字段的mysql預先搜索查詢

 
id  first_name  last_name  province_id 
1   ali    alii   2,12 
2   ahmad   ahmadi  22,1,4 

一個人可以在不同的省表」領域,其保存在表按省現場分離‘’我知道這是不是歸。搜索

$WHERE_ARR = array(); 
    if(trim($first_name)!=""){ 
     $WHERE_ARR['first_name']  = " p.first_name like '%".$first_name."%' "; 
    } 
    if(trim($last_name)!=""){ 
     $WHERE_ARR['last_name']  = " p.last_name like '%".$last_name."%' "; 
    } 

    if(trim($province)!=""){ 
     $WHERE_ARR['province'] = " p.province_id = ".$province." "; 
    }  
    $WHERE_STR = implode(' AND ', $WHERE_ARR); 
    $WHERE_STR = (trim($WHERE_STR)!="")?" AND " . $WHERE_STR:''; 

    $QUERY = " 
       SELECT p.*,pr.province 
       FROM ndi_participants p,ndi_provinces pr 
       WHERE pr.province_id = p.province_id 
       ". $WHERE_STR . " 
       ORDER BY pr.province ASC 
       LIMIT ".$start.", " . $perpage . " 
       "; 
    return $this->db->query($QUERY); 

肯定 我用隨後的功能是不準確的,當我通過省現場搜索。 我如何通過省現場搜索時,它是多值通過分離「」
注:我用笨

感謝您的幫助

回答

1

嘗試FIND_IN_SET MySQL的功能provience_id搜索

if(trim($province)!=""){ 
     $WHERE_ARR['province'] = " p.province_id = FIND_IN_SET(".$province.",p.province_id)"; 
    } 
+0

Find_in_set是MySQL的功能,所以需要不帶引號。 '「p.province_id = FIND_IN_SET(」。$ province。「,p.province_id)」;' – Narek 2013-04-22 11:32:02

+1

@narek:我同意。更新的答案。謝謝 – 2013-04-22 11:34:00

+0

需要注意的一個重要的事情是,FIND_IN_SET將返回當前字符串的索引,例如,SELECT FIND_IN_SET('1','4,3,7,21,1');將返回5而不是1.所以你應該改變查詢來檢查函數返回值應該大於'0'而不是等於你想檢查的值。 – Vijay 2013-04-22 11:37:43