2015-07-27 14 views
5

Ho un database con due tabelle denominate categorie e prodotti. Voglio visualizzare i prodotti per categorie.Come visualizzare i prodotti per categorie utilizzando codeigniter

Come

Category 1 
     -Product 1 
     -Product 2 
Category 2 
     -Product 1 
     -Product 2 

Ma, il mio codice restituisce nome categoria con ciascun prodotto. Come

Category 1 
     -Product 1 
Category 1 
     -Product 2 
Category 2 
     -Product 1 
Category 2 
     -Product 2 

Qui è il mio tentativo di codice:

Modello

function NestedProducts() 
{ 
    $sql = "Select C.c_name, P.productname 
     From categories C left join products P on C.id = P.category_id 
     Order by C.c_name"; 
     $query = $this->db->query($sql); 

     return $query->result_array(); 
} 

controller

public function index() 
{ 
    $data['productsbycategory'] = $this->Model->NestedProducts(); 
    $this->load->view('home', $data); 
} 

View

<?php foreach($productsbycategory as $row) : ?> 
    <div> 
     <h4><?php echo $row['c_name']; ?></h4> 
      <div> 
      <h6><?php echo anchor('method/'.$id, $row['productname']); ?></h6>   
     </div> 
    </div> 
<?php endforeach; ?> 

risposta

0

È necessario creare un sotto array di prodotti con categoria come rispettiva chiave.

function NestedProducts() { 
    $sql = "Select C.c_name, P.productname 
     From categories C left join products P on C.id = P.category_id 
     Order by C.c_name"; 
     $query = $this->db->query($sql); 
     $products = array(); 
     if ($query->num_rows()) { 
      foreach ($query->result_array() as $row) { 
      $products[$row['c_name']][] = $row; 
      } 
     } 
     return $query->result_array(); 
} 

E in vista:

<?php foreach($productsbycategory as $categoryName => $row) : ?> 
    <div> 
     <h4><?php echo $categoryName;?></h4> 
     <?php foreach($row as $product) : ?> 
      <div><h6><?php echo anchor('method/'.$row['id'], $row['productname']); ?></h6></div> 
     <?php endforeach; ?> 
    </div> 
<?php endforeach; ?> 
1

solo aggiornare la query utilizzando group_concat e group by clausola e si otterrà valori separati da virgola che si può semplicemente esplodere su comma

$sql = "Select C.c_name, group_concat(P.productname) as productname 
     From categories C left join products P on C.id = P.category_id 
     group by C.c_name 
     Order by C.c_name"; 

Nota: Non testato

+0

Ottenere errore * Array per conversione String *, ma come convertire esso, è array di array di – User1019

+0

Inserisci 'print_r ($ your_array)' –

+0

Mi può spiegare plz come applicarlo. esplode (',', ancora ('cms/article /'.$ row [' a_id '], $ row [' heading '])); – User1019

0

Modello dovrebbe essere:

Modello

function NestedProducts() 
{  
    $sql = "SELECT C.c_name, P.productname  
FROM categories C  
LEFT JOIN products P on C.id = P.category_id  
ORDER BY C.id";  

$query = $this->db->query($sql);  

return $query->result_array();  
} 
Problemi correlati