2012-03-28 9 views
0

Ich habe Form wie folgt suchen:PHP MySQL erstellen Abfrage mehrere Tabellen

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

und PHP-Code für die Suche:

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

Idee hinter dieser Suche - ich muss in der Lage sein, Hexen Tabellen auswählen Ich möchte suchen und die Suche nach dem/den Schlüsselwort (en) muss für jede gewählte Tabelle funktionieren.

Wenn eines der Kontrollkästchen aktiviert ist, funktioniert es gut, aber wenn zwei oder mehr markiert sind, und wenn es mehr als ein Schlüsselwort gibt (im Moment versuche ich nur global_info Tabelle mit zwei oder mehr Schlüsselwörtern), Funktion arbeitet unscharf. Manchmal funktioniert es nicht, oder wenn es funktioniert, gibt es mehrere Male dasselbe Ergebnis oder alles außer dem Schlüsselwort. Im Moment verstehe ich nicht ganz, warum es Ergebnisse gibt, die es gibt. Wie funktioniert das?

+0

können Sie mir erwarteten Ergebnisse korrigieren. – Sara

Antwort

2

Versuchen Sie es wie folgt zu lesen Wechsel:

$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) . ')'; 
} 
Verwandte Themen