【问题标题】:Multiple Joins in CodeigniterCodeigniter 中的多个连接
【发布时间】:2011-06-22 10:29:08
【问题描述】:

我是构建数据库的新手,我正在尝试基于具有三个数据库表的 JOIN。

Table A = ID, Name, etc
Table B = ID, Name, etc
Table C = ID, TableAId, TableBId

我不知道使用活动记录如何进行此选择。我试图提出尽可能少的请求,但在不进行三个单独调用的情况下如何编写所有请求时遇到了困难。

【问题讨论】:

    标签: php database codeigniter join


    【解决方案1】:
    $this->db->select('*');
    $this->db->from('TableA AS A');// I use aliasing make joins easier
    $this->db->join('TableC AS C', 'A.ID = C.TableAId', 'INNER');
    $this->db->join('TableB AS B', 'B.ID = C.TableBId', 'INNER');
    $result = $this->db->get();
    

    join 函数的工作方式如下: join('TableName', 'ON 条件', '连接类型');

    等价的sql:

    SELECT *
    FROM TableA AS A
        INNER JOIN TableC AS C
        ON C.TableAId = A.ID
        INNER JOIN TableB AS B
        ON B.ID = C.ID
    

    我发现先编写 SQL,对其进行测试,然后转换为活动记录样式可以最大限度地减少错误。

    【讨论】:

    • 这会产生重复的行。有什么解决办法吗?
    • @JWCMay 它永远不会重复行,您有多个匹配项,这就是全部目的。如果你想要不同的数据,你应该重新设计你的数据库。
    【解决方案2】:
    $this->db->select('*');
    $this->db->from('blogs');
    $this->db->join('comments', 'comments.id = blogs.id');
    $this->db->join('authors', 'authors.id = comments.author_id');
    

    希望你能得到我的例子。

    只需添加另一个$this->db->join()

    对于复杂的查询,您最好查看 ORM,例如 doctrine

    【讨论】:

      【解决方案3】:
      $this->db->select('*');
      
      $this->db->from('table1');
      
      $this->db->join('table2','table1.id=table2.id'); 
      
      $this->db->join('table3','table2.id=table3.id');
      
      $this->db->join('table4','table3.id=table4.id'); 
      
      $this->db->join('table5','table5.id=table4.id');
      
      $this->db->where('table5.id',$this->session->userdata('id'));//getting value from session and match the id of table5 and then show data
      
      $data=$this->db->get()->result();//all data store in $data variable
      

      【讨论】:

      • 这个答案缺少教育解释。
      【解决方案4】:

      如果你想要一个灵活的查询,你可以使用:

      http://codeigniter.com/user_guide/database/results.html

      使用以下语法$query = $this->db->query('SELECT * FROM my_table');

      这里是查询:

      SELECT a.name as namea ,b.name as nameb FROM tablec c
      JOIN tablea a ON a.ID = c.ID
      JOIN tableb b ON b.ID = c.ID
      

      您可能想了解更多关于连接的信息here

      然后以这样的方式检查你的结果:

      $query = $this->db->query("YOUR QUERY");

      foreach ($query->result_array() as $row)
      {
         echo $row['namea'];
         echo $row['nameb'];
      }
      

      【讨论】:

      • 使用查询命令只是解决问题的一种快速方法,这对他来说并不能解决任何问题。还有潜在的安全风险,因为个人数据不会被 CI 转义。
      猜你喜欢
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 2011-01-08
      相关资源
      最近更新 更多