2013-04-22 3 views
0

У меня есть функция поиска для поиска по различным критериям из таблицы db. здесь есть «поле таблицы с некоторыми даннымиmysql поиск поискового запроса с полями с mulitivalued

 
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

Попробуйте 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

+1

@narek: Я согласен. обновленный ответ. Спасибо –

+0

Очень важно отметить, что FIND_IN_SET вернет индекс текущей строки, Например, SELECT FIND_IN_SET ('1', '4,3,7,21,1'); вернет 5, а не 1. Таким образом, запрос должен быть изменен, чтобы проверить, что возвращаемое значение функции должно быть больше, чем '0', а не равное значению, которое вы хотите проверить. – Vijay