Codeigniter 规范点火器柱和类别

Codeigniter 规范点火器柱和类别,codeigniter,blogs,categories,posts,Codeigniter,Blogs,Categories,Posts,我正在做一个codeigniter项目,我是codeigniter的新手,但现在在一定程度上理解了它。我正在为uni构建一个简单的应用程序,我在尝试显示哪些项目属于哪些类别时遇到了一个问题 我的数据库结构 |------------------| |--------------------| |---------------------------------| | books | | book_categories | | book_linktable

我正在做一个codeigniter项目,我是codeigniter的新手,但现在在一定程度上理解了它。我正在为uni构建一个简单的应用程序,我在尝试显示哪些项目属于哪些类别时遇到了一个问题

我的数据库结构

|------------------|  |--------------------|  |---------------------------------|
| books            |  | book_categories    |  | book_linktable                  |
|------------------|  |--------------------|  |---------------------------------|
| book_id          |  | book_category_id   |  | book_linktable_book_id          |
| book_name        |  | book_category_name |  | book_linktable_book_category_id |
| book_description |  |--------------------|  |---------------------------------|
| book_grade       |
| book_author      |
| book_edition     |
| book_publisher   |
| book_price       |
| book_image       |
|------------------|
好的,在我的模型中使用连接,我已经成功地从book_linktable中提取了我想要的数据,并且在我的视图中使用了一个简单的foreach循环来显示它

问题是,如果一本书属于两个或两个以上的类别,它在book_linktable中看起来是这样的:

|------------------------|---------------------------------|
| book_linktable_book_id | book_linktable_book_category_id |
|------------------------|---------------------------------|
|           1            |                1                |
|           1            |                2                |
|------------------------|---------------------------------|
(因此,第1册属于第1类和第2类)

但问题是,当我在视图中执行foreach循环时,它会将它们显示为两本不同的书,如下所示:

|Name  | Grade   | Price | Categories   |
|---------------------------------------|
|Book1 | Grade 1 | £7.00 | Announcement |
|Book1 | Grade 1 | £7.00 | Event        |
我只需要找出如何回应不同类别的书籍,而不是书籍显示多次。大概是这样的:

|Name  | Grade   | Price | Categories          |
|----------------------------------------------|
|Book1 | Grade 1 | £7.00 | Announcement, Event |
以下是我的模型函数:

function get_books(){       
        $this->db->select('books.book_id, books.book_name, books.book_grade, books.book_edition, books.book_price, book_categories.book_category_id, book_categories.book_category_name');
        $this->db->from('book_linktable');
        $this->db->join('books', 'book_linktable.book_linktable_book_id = books.book_id');
        $this->db->join('book_categories', 'book_linktable.book_linktable_book_category_id = book_categories.book_category_id');

        $query = $this->db->get();
        return $query->result();
    } //function get_books()
以下是我的控制器功能:

function books($condition = FALSE){
        if($condition === TRUE OR $this->admin_model->logged_in() === TRUE)
        {
            $data = $this->admin_model->display();
            $data['query'] = $this->admin_model->get_books();
            $data['page_title'] = 'Books';
            $this->load->view('admin_section/books/main', $data);
        }
        else
        {
            $this->load->view('admin_section/details');
        }
    }  //function books()
以下是我的观点:

    <?php
      foreach($query as $row) {
        echo "<tr>";
        echo "<td>" . $row->book_name . "</td>";
        echo "<td>" . $row->book_grade . "</td>";
        echo "<td>" . $row->book_edition . "</td>";
        echo "<td>" . "&pound;" . $row->book_price . "</td>";
        echo "<td>" . $row->book_category_name . "</td>";
        echo "<td>" . anchor('books_admin/edit_book/' . $row->book_id, img(array('src'=>'/sys_icons/edit.png','border'=>'0','alt'=>'Edit'))) . " ";
echo "<td>" . anchor('books_admin/delete_book/' . $row->book_id, img(array('src'=>'/sys_icons/delete.png','border'=>'0','alt'=>'Delete', 'class' => 'delete_book'))) . "</td>";
        echo "</tr>";
      }
    ?>

任何帮助都将不胜感激

谢谢, 汤姆

使用此查询。Group concat将为您提供逗号分隔的字段,您可以在php端对其进行分解

在控制器中

function getWhatiNeed(){
    $this->load->model('test');// The model where the getMyRequirements function is
    $result = $this->test->getMyRequirements();
    $data['result'] = $result;
    $this->load->view('my_view',$data);
}
现在,当您循环结果时,在视图中

if(count($result)>0)
    foreach($results as $row){
        $categories = explode (',',$row->book_category_id);

        foreach($categories as $category){
              echo  $category;
        }
    }

通过book_linktable_book_id查看此使用组,并通过将book_linktable_book_id传递给来自的另一个函数来获取类别model@Vamsi是的,但是你应该使用分组的方法来解决你的问题。感谢所有的反馈,我已经看了分组方法和分组方法,我了解它们,了解它们的功能,但我不确定如何在视图中正确地反映这些内容,这解决了我的部分问题,因为现在我没有多本相同的书,但我不知道如何反映其余类别,它只是将它遇到的第一本输出。很抱歉成为一个痛苦的人Hi Raheel,谢谢你的回复,我一直在度假,很抱歉等待了很久的回复。我完全理解这背后的逻辑,我理解爆炸是什么,但我的观点中有一个错误(未定义的变量$result),你知道为什么吗,我的编码和你说的一模一样,我确信所有正确的视图名称和模型都被调用了,所以这并不是什么愚蠢的事情。我不明白为什么它会出现这个错误。首先检查isset($result),然后处理对不起,我真的不明白这一切似乎都正常。我得到了我在上一条评论中提到的错误,以及为foreach提供的无效参数,但是代码是正确的,请尝试查看变量result是否在文件中的其他地方使用,您可能正在取消设置它
if(count($result)>0)
    foreach($results as $row){
        $categories = explode (',',$row->book_category_id);

        foreach($categories as $category){
              echo  $category;
        }
    }