具有多值字段的mysql高级搜索查询

时间:2013-04-22 11:24:43

标签: php mysql

我有一个搜索功能,可以按照db表中的不同条件进行搜索。 这是表'带有一些数据的字段

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

当我通过省域搜索时,确定它不准确。 如果用“,”分隔多值,我怎么能按省字段搜索 注意:我正在使用codeigniter

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

尝试使用FIND_IN_SET mysql函数在provience_id中搜索

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