2012-03-28 3 views
0

У меня есть форма, как это:PHP MySQL создать запрос для поиска несколько таблиц

<form method="POST" action="<?php echo base_url() ?>admin/admin_search"> 
    <fieldset> 
     <label for="nalozi">Nalozi</label><input type="checkbox" name="nalozi" /> 
     <label for="malio_glasi">Mali oglasi</label><input type="checkbox" name="mali_oglasi" /> 
     <label for="zute_strane">Zute strane</label><input type="checkbox" name="zute_strane" /> 
     <label for="berza_rada">Berza rada</label><input type="checkbox" name="berza_rada" /> 
     <label for="vesti">Vesti</label><input type="checkbox" name="vesti" /> 
     <label for="event">Dogadjaji</label><input type="checkbox" name="event" /> 
    </fieldset>  

    <input type="search" name="keyword" id="keyword" /> 
    <input type="submit" value="Trazi"/> 
</form> 

и PHP код для поиска:

function admin_search(){ 

     $keyword = trim($_POST['keyword']); 
     $search_explode = explode(" ", $keyword); 
     $x = 0; 

     $mgs = isset($_POST['mali_oglasi']) ? 1 : ""; 
     $jbs = isset($_POST['berza_rada']) ? 2 : ""; 
     $nws = isset($_POST['vesti']) ? 3 : ""; 
     $ypg = isset($_POST['zute_strane']) ? 4 : "";   

     if($mgs != "" || $jbs != "" || $nws != "" || $ypg != ""){$or = " OR ";}else{$or = "";} 
     if($jbs != "" || $nws != "" || $ypg != ""){$or1 = " OR ";}else{$or1 = "";} 
     if($nws != "" || $ypg != ""){$or2 = " OR ";}else{$or2 = "";} 
     if($ypg != ""){$or3 = " OR ";}else{$or3 = "";} 

     $nlz = isset($_POST['nalozi']) ? "person" : ""; 
     $dgj = isset($_POST['event']) ? "event" : ""; 

     if($nlz != "" || $dgj != ""){$z = ", "; $or_like = " OR "; }else{$z = " "; $or_like = "";} 
     if($dgj != ""){$z1 = ", ";$or_like1 = " OR ";}else{$z1 = " ";$or_like1 = "";} 

     if($mgs != "" || $ypg != "" || $jbs != "" || $nws != ""){$gi = "global_info";}else{$gi = "";} 

     $sql = "SELECT * FROM "; 

     if($gi != ""){$sql .= " $gi $z";} 
     if($nlz != ""){$sql .= " $nlz $z1";} 
     if($dgj != ""){$sql .= " $dgj";} 

     $sql .= " WHERE "; 
     if($mgs != ""){$sql .= " global_info.info_type_id = {$mgs} $or1 ";}   
     if($jbs != ""){$sql .= " global_info.info_type_id = {$jbs} $or2 ";}   
     if($nws != ""){$sql .= " global_info.info_type_id = {$nws} $or3 ";}   
     if($ypg != ""){$sql .= " global_info.info_type_id = {$ypg} ";} 
     $sql .= " AND "; 
     foreach($search_explode as $each){ 
      $x++; 
      if($x == 1){ 
       if($gi != ""){$sql .= " global_info.name LIKE '%$each%' $or_like ";} 
       if($nlz != ""){$sql .= " $nlz.name LIKE '%$each%'$or_like1 ";} 
       if($dgj != ""){$sql .= " $dgj.name LIKE '%$each%' ";} 

      } else { 

       $sql .= " AND global_info.name LIKE '%$each%' "; 
      } 
     } 
     echo $sql;   
     $q = $this->db->query($sql); 
     echo $q->num_rows(); 
     return $q = $q->num_rows() == 0 ? FALSE : $q->result_array(); 
    } 

Идея этой категории - я должен быть в состоянии выбрать таблицы ведьм Я хочу выполнить поиск и поиск по ключевым словам (-ам), которые нужно использовать для любой выбранной таблицы.

Если установлен один из флажков, он работает нормально, но если проверено два или более, и если имеется более одного ключевого слова (на данный момент я пытаюсь использовать только таблицу global_info с двумя или более ключевыми словами) функция работает нечеткой. Иногда это не работает, или если он работает, он дает одинаковые результаты несколько раз или все, кроме ключевого слова. На данный момент я не совсем понимаю, почему он дает результаты, которые он дает. Как это сделать?

+0

вы можете дать мне исправить ожидаемые результаты. – Sara

ответ

2

Попробуйте изменить его читать так:

$tables = array(); 
if(isset($_POST['mali_oglasi'])){ 
    $tables['mgs'] = 1; 
} 
/* 
repeat for the other tables 
*/ 

/* Where you're building your WHERE clause, use this instead of the 'OR' logic */ 
if(!empty($tables)){ 
    $sql .= 'global_info.info_type_id IN (' . implode(',',$tables) . ')'; 
} 
Смежные вопросы