我有两张桌子
类别:
产品
我想得到这个结果:
类别 - > 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的最佳方法是什么?
答案 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 浏览文档,这有助于您更好地理解,如何利用INNER
或LEFT
加入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;
}