1查询取决于另一个查询codeigniter

时间:2012-10-20 06:48:52

标签: php codeigniter many-to-many

我有一个表tbparent_module,tbsub_module和一个名为tbmodule_pairing的联结表,其中包含2个表的ID(tbparent_module,tbsub_module)

在我的控制器上,我调用了一个模型,该模型将查询所有父模块并将其显示在视图上。我已经这样做但我的问题是,我还要显示它的子模块。

输出示例

Parent Module 1
     Sub Mod 1
     Sub Mod 2
     Sub Mod 3

Parent Module 2
     Sub Mod 1
     Sub Mod 2
     Sub Mod 3

Parent Module 3
     Sub Mod 1
     Sub Mod 2
     Sub Mod 3

这是我现在的代码

查看

foreach($module as $result){
      $sql = mysql_query("SELECT * FROM `tbsub_module` where parent_id='$result->id'");
      while($row=mysql_fetch_array($sql)){
         echo $row['subcateg_name'];
      }
}

我知道这是错的。但这是我知道解决问题的唯一方法。我想遵循MVC规则,我也想使用CodeIgniter的库

2 个答案:

答案 0 :(得分:0)

转到此CI文档http://codeigniter.com/user_guide/database/index.html CI中有所有可用的DB方法。

这可能是有效(未经测试)的方式来进行查询..

$query = $this->db->get('modules');  ## SELECTIN all records from modules table
foreach ($query->result() as $row)
{
    $query2 = $this->db->get_where('tbsub_module', array('parent_id' => $row->id));
        foreach ($query2->result() as $row2)
        {
            echo $row2->subcateg_name;
        }
}

答案 1 :(得分:0)

您只需将数据从控制器传递到视图即可。你基本上打破了MVC的整个想法。查询应该在模型中,由控制器调用然后传递给视图。我不会解决这个问题(很累......)但这基本上就是你想要的。

控制器:

function whateverTheViewIs()
{
    $this->load->model('categories');
    $data['subCatName'] = $this->categories->getSubcats();
    $this->load->view('viewName',$data);
}

模型类别:

function getSubCats()
{
   run your query here, return array of whatever data you need.
}

的viewName:

foreach($subCat as $subcateg)
{
    echo $subcateg['subcateg_name'];
}

如果您也需要该模块,您可以将其加载到控制器中的另一个$ data ['无论什么样的数组]数组中并以相同的方式传递它。