在一个查询中选择所有项目和相关项目

时间:2015-08-28 19:02:31

标签: php sql codeigniter

我正在使用最新的codeigniter

我试图从数据库中获取所有产品以及每种产品的所有相关项目。 Haven编码了一段时间,所以我卡在输出上..

这是我的模特:

   public function collections() {

        $this->db->select('*');
        $this->db->from('products');
        $this->db->join('product_images', 'product_images.from_set = products.img_set_ref');
        $this->db->order_by('products.id');

        $q = $this->db->get();         

        if ($q->num_rows() > 0) {       
            return $q->result();        
        }
        return false;               
    }

控制器:

    public function products() {   
    $this->load->model('Frontend'); 
    $page_data['results'] = $this->Frontend->collections();       
    $this->load->view('collections', $page_data);           
}

这是我试图获得的输出(两个产品的示例):

            <div class="pr"> //product 1
            <a href="img/pr_1.jpg" rel="gallery01"><img src="img/pr.jpg" alt="">
            </a>
            <a href="img/pr_2.jpg" rel="gallery01"><img src="img/pr.jpg" alt="">
            </a>
        </div>

        <div class="pr"> //product two
            <a href="img/pr_12.jpg" class="fancybox" rel="gallery02"><img src="img/pr.jpg" alt="">
            </a>
            <a href="img/pr_22.jpg" class="fancybox" rel="gallery02"><img src="img/pr.jpg" alt="">
            </a>
        </div>

我无法弄清楚如何在视图中正确回显foreach循环中的产品,以便它们处于如上所述的结构中。如何实现?

3 个答案:

答案 0 :(得分:0)

我可以看到您的控制器,以便我可以看到您的数据将如何查看。 在控制器中:

$result[image] = $this->your modelname->model function()

像这样传递图像数组来查看:

$this->load-view(your view name,$result)

在视图中: 像这样放置foreach:

foreach ($image as images):
    $variablename = $images['column name'];

Echo $variable;

endforeach;

Colum name是您要获取的yoir数据库列名称

答案 1 :(得分:0)

在集合函数中使用两个查询或编写第二个函数来获取产品。

在新函数中获取这些产品并将它们作为参数传递给您的集合函数。在集合函数中,您可以使用IN语句编写查询,或者执行foreach循环并每次查询数据库并按照您喜欢的方式构建数组。

使用in语句可以有类似的内容:

"WHERE your_field IN ("'.implode('", "', $products) . "')"

然后浏览结果并匹配字段并构建数组。

使用foreach

foreach($products as $key => $product){
      $myarray[] = .... write your query and get the result
}

答案 2 :(得分:0)

如果我需要 fast'n'dirty 方式,我会选择为每个产品构建一个临时的图像阵列

$groupedProducts = array();
foreach ($products as $product) {
     if (!array_key_exists($product['id'], $groupedProducts) {
         $groupedProducts[$product['id']] = $product;
         $groupedProducts[$product['id']]['images'] = array();
     }
     $groupedProducts[$product['id']]['images'][] = $product['product_images.url'];
}

然后迭代

foreach ($groupedProducts as $product) {
    // output some description, title, price, etc.
    foreach ($product['images'] as $imageUrl) {
        echo '<img src="'.$imageUrl.'">';
    }
}