如何在 CodeIgniter 中使用 JOIN 和 get_where 子句

Posted

技术标签:

【中文标题】如何在 CodeIgniter 中使用 JOIN 和 get_where 子句【英文标题】:How do i use JOIN with a get_where clause in CodeIgniter 【发布时间】:2019-09-02 14:56:36 【问题描述】:

在通过发送 Id 从上一个表 UI 中单击“打开”按钮后,我试图从两个表中获取数据。 例如

<a name="Open" href="<?php echo base_url('welcome/WellProfile/'.$post->Id) ?>">

(https://imgur.com/6IU1Tfo)

所以我有两个表 - 即 "WellDataA" 和 "WellDataB" ,我想通过 WellName(column) 获取 WellDataB 数据与 WellDataA 匹配的数据。

Example: 

WellDataA:
Id   Platform  WellName
.
.
4      ZE          ZE-A
5      ZE          ZE-B
6      ZE          Ze-B
.
.

WellDataB:
Id     WellName     CompleteDate
1        ZE-A           12/3
2        ZE-B           14/5
3        ZE-C           20/6

这就是我目前的查询方式,但最终出错

public function get_news_by_id($Id = 0)

        if ($Id === 0)
        
            $query = $this->db->get('WellDataA');
            return $query->result_array();
        
         $this->db->select('*'); 
         $this->db->from('WellDataA'); 
         $this->db->join('WellDataB','WellDataA.WellName = 
         WellDataB.WellName','INNER');  
        $query = $this->db->get_where('WellDataA', array('Id' => $Id));
        return $query->row_array();

我希望在 ZE-A 上单击“打开”按钮时输出将显示 ZE、ZE-A、12/3。但实际输出的是ZE,ZE-A而已。提前非常感谢您!:)

【问题讨论】:

抛出什么错误? 【参考方案1】:

试试这个,你的问题出在 get_where() 所以,我删除它并重写它

public function get_news_by_id($Id = 0)

    if ($Id === 0)
    
        $query = $this->db->get('WellDataA');
        return $query->result_array();
    
    $this->db->select('a.Id,a.Platform,a.WellName,b.Id,b.CompleteDate'); 
    $this->db->from('WellDataA a'); 
    $this->db->join('WellDataB b','a.WellName = b.WellName','INNER');  //changes
    $this->db->where('b.Id',$Id); //changes
    $query = $this->db->get();
    if ($query->num_rows() > 0) 
        return $query->row_array();
    else
        return array();
    

【讨论】:

get_where()join() 没有问题。这两个功能可以一起工作 它不会给出任何错误但它会给他一个空白屏幕,所以我说一个问题 非常感谢先生!此代码适用于我的项目 不客气@aineivyar,请接受答案【参考方案2】:

如果我的解决方案不是一个好的解决方案,我很抱歉, 但我建议您将表格的结构更改为:

WellDataA:
Id   Platform  WellDataB
.
.
4      ZE          1
5      ZE          2
6      ZE          3
.
.

WellDataB:
Id     WellName     CompleteDate
1        ZE-A           12/3
2        ZE-B           14/5
3        ZE-C           20/6

由于我假设使用的模型是关系模型,所以必须首先实现的一件事是使表都具有关系。而不是将 WellDataA 和 WellDataB 与 WellDataA 内部的 WellDataB 中的 Id 连接起来。

【讨论】:

我也尝试使用您的概念并更改我的一些代码。它有助于!谢谢!【参考方案3】:

我认为您只需要删除一些代码。试试这段代码

public function get_news_by_id($Id = 0)

        if ($Id === 0)
        
            $query = $this->db->get('WellDataA');
            return $query->result_array();
        
         $this->db->join('WellDataB','WellDataA.WellName = 
         WellDataB.WellName','INNER');  
        $query = $this->db->get_where('WellDataA', array('Id' => $Id));
        return $query->row_array();

【讨论】:

感谢您抽出宝贵时间!我已经弄清楚了代码:)

以上是关于如何在 CodeIgniter 中使用 JOIN 和 get_where 子句的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 join codeigniter 从另一个表中获取值

SQL Join 在两个表上的 Codeigniter 中?

在 php codeigniter 中使用 join/concat 的 mysql 查询结果

如何在 Codeigniter 中加入三个表

如何在 Codeigniter 中连接两个表

Codeigniter MySQL a Join Query 与结果中的列名冲突