【问题标题】:How to display products by categories using codeigniter如何使用 codeigniter 按类别显示产品
【发布时间】:2015-07-27 06:34:25
【问题描述】:

我有一个数据库,其中包含两个名为类别和产品的表。我想按类别显示产品。

喜欢

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

但是,我的代码会返回每个产品的类别名称。喜欢

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

这是我的代码尝试:

型号

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

控制器

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

查看

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

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    只需使用group_concatgroup by 子句更新您的查询,您将获得逗号分隔的值,您可以简单地在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";
    

    注意:未测试

    【讨论】:

    • Getting Error Array to String Conversion,但是如何转换,它是array的array
    • 发布您的print_r($your_array)
    • 你能解释一下如何应用它吗? explode(',', anchor('cms/article/'.$row['a_id'], $row['heading']));
    • 但是你在哪里发布了你的数组
    【解决方案2】:

    您需要创建产品的子数组,并将类别作为它们各自的键。

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

    并且在视图中:

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

    【讨论】:

      【解决方案3】:

      型号应该是:

      型号

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-16
        • 2015-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多