Codeigniter连接两个表显示类别名称并列出所有项目

时间:2017-03-28 16:28:47

标签: php mysql codeigniter

我有两张桌子

  1. 类别:

    • CAT_ID
    • cat_name
  2. 产品

    • items_it
    • ITEM_NAME
    • item_cat
  3. 我想得到这个结果:

      

    类别 - > cat_name1
        - item_name1
        - item_name2

         

    类别 - > cat_name2
        - item_name3
        - item_name4

    使用PHP,我会选择这样的东西:

    $query1 = 'SELECT *FROM Category';
    foreach($query1 as $cat) { 
        $query2 = 'SELECT *FROM Items WHERE "item_cat" = $cat';
    
        echo $cat;
        foreach($query2 as $item) {
        echo $item;
        }
    }
    

    使用CODEIGNITER的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

以下是使用您的架构的Codeigniter中的简单示例:

<?php
$this->db->select('*');     // select all columns
$this->db->from('Category'); // FROM table
$this->db->join('Items', 'Items.item_cat = Category.cat_id'); // INNER JOIN
$query = $this->db->get(); // GET RESULT
?>

为了获得结果,您可以使用两种方法,要么以对象形式还是以数组形式获取数据。

在数组中,使用result_array()方法,例如:

$result = $query->result_array();
echo "<pre>";
print_r($result); // will print all data in array

在对象中,使用result()方法,例如:

$result = $query->result();
echo "<pre>";
print_r($result); // will print all data in object

现在您可以根据需要进行排序:

$newArray = array();
foreach ($result as $key => $value) {
    $newArray[$value['cat_name']][] = $value; // sort as per category name
}
print_r($newArray); // will print all data against each category.

现在将所需结果打印为:

foreach ($newArray as $key => $value) {
    echo $key."<br/>"; // print Category Name
    foreach ($value as $final_value) {
        echo $final_value['item_name']."<br/>"; // print all items against category
    }
}

Query Builder Class 浏览文档,这有助于您更好地理解,如何利用INNERLEFT加入CI。

答案 1 :(得分:0)

使用联接:

$this->db->select(*);
$this->db->join('items as i', 'i.item_cat = c.cat_id');
$query = $this->db->get('category as c');

foreach($query->result() as $result){
    echo $result->cat_name;
    echo $result->item_name;
}