2016-05-11 13 views
-2

Ich kann ähnliche Post-Daten von db mit codeigniter nicht abrufen. In meinem blog, habe ich ein Tag-Feld, das Daten wie 'PHP, MySQL, Mongo, Java, Jquery'
Ich versuche nur, ähnliche Post, die mit aktuellen Posts Tags verwandt ist, zu erhalten. Aber ich bekomme kein erwartetes Ergebnis. und das Problem ist in meiner Abfrage. Es zeigt nur drei Post und das ist 1., letzte und Nummer 3. eins.Retrieve verwandten Beitrag mit codenigniter

[CONTROLLER] 

public function showpost() 
{ 
    $data = array();    
    $this->load->view('header',$data);  
    $data['post'] = $query->result(); 
    $data['similar'] = $this->crudModel->getSimilarPost(); 
    $this->load->view('showfull',$data); 
    $this->load->view('footer'); 
} 

[MODEL] 

public function getSimilarPost() 
{ 
    $query = $this->db->get_where('blogs',array('id' => $this->uri->segment(3))); 
    foreach($query->result() as $row){ $tags = $row->tags; } 
    $match = explode(',', $tags); 
    for($i = 0; $i < count($match); $i++) 
    { 
     $this->db->like('tags',$match[$i]); 
     $this->db->from('blogs'); 
     $sqlQuery = $this->db->get(); 
    }  
    return $sqlQuery->result(); 
} 

[VIEW] 

foreach($similar as $row) 
{ 
    echo($row->btitle.'<br/>'); 
} 
+0

schreiben Sie Ihre Abfragen im Modell statt Controller ... –

+0

Wenn ich es in Modell schreibe wird es erwartetes Ergebnis abrufen. Ist es das einzige Problem, das du siehst? – munaz

+0

@munaz sagt er, um den Standard von ** MVC ** Muster –

Antwort

2

Versuchen Sie es.

public function showpost() 
{ 
    $data = array();    
    $this->load->view('header',$data);  
    $data['post'] = $query->result(); // why this line?? 
    $data['similar'] = $this->crudModel->getSimilarPost(); 
    $this->load->view('showfull',$data); 
    $this->load->view('footer'); 
} 

[MODEL] 

public function getSimilarPost() 
{ 
    $query = $this->db->get_where('blogs',array('id' => $this->uri->segment(3))); 
    foreach($query->result() as $row){ $tags = $row->tags } 
    $match = explode(',', $tags); 
    $result = []; 
    for($i = 0; $i < count($match); $i++) 
    { 
     $this->db->like('tags',$match[$i]); 
     $this->db->from('blogs'); 
     $sqlQuery = $this->db->get(); 
     if($sqlQuery->num_rows()>0) 
     $result[] = $sqlQuery->result(); 
    }  
    return $result; 
} 

[VIEW] 

$check = []; 
foreach($similar as $row) 
{ 
    foreach($row as $data) 
    { 
     if(!in_array($data->btitle,$check)) 
     { 
      $check[] = $data->btitle; 
      echo $data->btitle.'<br/>'; 
     } 
    } 
} 
+0

Danke! so sehr! Sir, es funktioniert, hat aber ein einfaches Problem. Das ist die Wiedergabe, die ich zweimal besucht habe. Angenommen, ich habe 3 Posts "One", "Two" und "Three", also wenn ich Post "One" besuche, rendern "One", "One", "Two", "Three" – munaz

+0

Ich folge deinem Beispiel und seiner Arbeit für Holen Sie ähnliche Daten ohne dieses einfache Renderproblem. Bitte! Kannst du mir sagen, was die Schuld ist? – munaz

+0

habe nicht verstanden, was Sie fragen – Vinie