【问题标题】:Codeigniter active record - query 3 tablesCodeigniter 活动记录 - 查询 3 个表
【发布时间】:2014-11-20 20:52:02
【问题描述】:

我需要使用 3 个表进行查询,但我遇到了一些麻烦。 我的项目中有 3 个表:

projectsprojects_categoriescategories

projects

  • id_project
  • 标题
  • 日期

projects_categories

  • id_proj_cat
  • id_project
  • id_category

categories

  • id_category
  • 姓名

我已经进行了连接查询,但结果是一个数组,其中显示了多次相同的 project_id。 我需要的是一个更有效的查询,它可以为每个 project_id 列出一个内部数组,以及它的类别和名称。类似的东西。

我可以进行单独的查询,但我试图在一个查询中实现。

【问题讨论】:

  • 它的简单连接查询。你试过什么?
  • 是的,我有一个很长的数组,同一个项目多次出现。我需要的是每个项目数组中的数组列表。我可以做一个单独的查询......但我试图在一个查询中实现这一点。
  • 您的问题不清楚您要查找的内容。请在您的问题中显示您想要的数组结构。
  • Hello Capt. Jack Sparrow,结构是这样的: Array ( [0] => Array ( [id_projecto] => 29 [titulo] => Titulo 1 [data] => 2012-12 -12 [0] => 数组([0] => 数组([id_categoria] => 2 [nome_categoria] => Arquitectura)[1] => 数组([id_categoria] => 3 [nome_categoria] => Reabilitação)) ) [1] => 数组 ( [id_projecto] => 30 [titulo] => 标题 2 [data] => 2021-09-12 [0] => 数组 ( [0] => 数组 ( [id_categoria] => 3 [nome_categoria] => Reabilitação) [1] => 数组 ([id_categoria] => 4 [nome_categoria] => 设计))))

标签: php codeigniter


【解决方案1】:

试试这个

    $this->db->from("projects p");
    $this->db->select("p.id_project,c.categories,c.name");
    $this->db->join("projects_categories pc","pc.id_project = p.id_project","LEFT");
    $this->db->join("categories c","c.id_category = pc.id_category","LEFT");
    $result=$this->db->get()->result_array();

现在 $result 是你的数组。

【讨论】:

  • 我仍然面临同样的问题。 :( [0] => 数组 ( [id_projecto] => 29 [titulo] => Titulo 1 [data] => 2012-12-12 [id_categoria] => 2 [nome_categoria] => Arquitectura ) [1] =>数组 ( [id_projecto] => 29 [titulo] => Titulo 1 [data] => 2012-12-12 [id_categoria] => 3 [nome_categoria] => Reabilitação ) [2] => 数组 ( [id_projecto] => 30 [titulo] => Titulo 2 [data] => 2021-09-12 [id_categoria] => 4 [nome_categoria] => 设计)[3] => 数组([id_projecto] => 30 [titulo] => Titulo 2 [数据] => 2021-09-12 [id_categoria] => 3 [nome_categoria] => Reabilitação
  • 如果您的 projects_categories 表包含与所有 id_project 的关系,并且如果每个 id_category 都有名称,那么您可以使用内连接。只需将单词 LEfT 替换为 INNER。其他明智的选择 Distinct id_project 在您的选择语句中。如$this->db->select("DISTINCT(p.id_project),c.categories,c.name");
【解决方案2】:

试试这个:

$this->db->select('p.id_project,c.categories,c.name');
$this->db->from('projects p');
$this->db->join("projects_categories pc","p.id_project = pc.id_project","INNER");
$this->db->join("categories c","pc.id_category = c.id_category","INNER");
$query = $this->db->get();
return $query->result_array();

【讨论】:

    猜你喜欢
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    相关资源
    最近更新 更多