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

时间:2019-04-11 21:35:21

标签: sql codeigniter phpmyadmin

我试图通过发送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。提前非常感谢您!:)

3 个答案:

答案 0 :(得分:0)

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

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连接。

答案 1 :(得分:0)

尝试一下,您的问题在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();
    }
}

答案 2 :(得分:0)

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

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();
}