2015-07-27 23 views
5

Tôi có cơ sở dữ liệu với hai bảng có tên là danh mục và sản phẩm. Tôi muốn hiển thị các sản phẩm theo danh mục.Cách hiển thị sản phẩm theo danh mục bằng cách sử dụng mã hiệu

Giống như

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

Nhưng, mã của tôi trả về tên loại với mỗi sản phẩm. Giống như

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

Đây là nỗ lực mã của tôi:

Mẫu

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

khiển

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

Xem

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

Trả lời

0

Bạn cần tạo mảng phụ sản phẩm có danh mục làm khóa tương ứng.

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

Và theo quan điểm:

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

Chỉ cần cập nhật truy vấn của bạn sử dụng group_concatgroup by khoản và bạn sẽ nhận được các giá trị dấu phẩy tách ra mà bạn chỉ có thể phát nổ trên 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"; 

Lưu ý: Chưa được thử nghiệm

+0

Bắt Lỗi * Array chuyển đổi String *, nhưng làm thế nào để chuyển đổi nó, đó là mảng của mảng – User1019

+0

bài viết của bạn 'print_r ($ your_array)' –

+0

Bạn có thể giải thích cho tôi plz làm thế nào để áp dụng nó. explode (',', anchor (hàng 'cms/article /'.$ [' a_id '], $ row [' heading '])); – User1019

0

Mô hình nên là:

Mẫu

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();  
} 
Các vấn đề liên quan