Как использовать JOIN с предложением get_where в CodeIgniter - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь получить данные из двух таблиц после нажатия кнопки «Открыть» из предыдущего интерфейса таблицы путем отправки идентификатора. например

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

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

Итак, у меня есть две таблицы - а именно «WellDataA» и «WellDataB», я хочу получить данные, в которых данные WellDataB совпадают с данными WellDataA по WellName (столбец).

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, ZE-A, 12/3 при нажатии кнопки «Открыть» на ZE-A. Но фактический результат - ZE, только ZE-A. Заранее большое спасибо! :) 1013 *

Ответы [ 3 ]

0 голосов
/ 12 апреля 2019

Попробуйте, ваша проблема в 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();
    }
}
0 голосов
/ 12 апреля 2019

Я думаю, вам просто нужно удалить код. Просто попробуйте этот код

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();
}
0 голосов
/ 12 апреля 2019

Во-первых, мне жаль, если мое решение не будет хорошим, но я предлагаю вам изменить структуру ваших таблиц следующим образом:

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 с идентификатором из WellDataB внутри WellDataA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...