У меня следующая структура таблицы:
Таблица 1:
col1 | col2 | col3
1 | 1 | A
1 | 1 | B
2 | 2 | A
1 | 2 | C
2 | 2 | D
Таблица 2:
col4 | col5 | col6
101 | A | val1
101 | B | val2
101 | D | val3
Все записи таблицы 2 принадлежат тем записям в таблице 1, чья col2 содержит 2 в своем поле значения.
Использование ActiveЗаписи в Codeigniter, мне нужно получить следующие наборы результатов:
- Получить все записи, которые являются общими в таблице 1 и таблице 2 для col4 = 101, col1 = 2, col2 = 2
- Получить все записи, которые присутствуют только в таблице 1 для col4 = 101, col1 = 2, col2 = 2
- Получить все записи, которые присутствуют только в таблице 2 для col4 = 101, col1 = 2, col2= 2
Мой код для случая 1 ниже:
$this->db->select('Table1.*, Table2.*');
$this->db->from('Table2');
$this->db->join('Table1', 'Table1.col3=Table2.col5');
$this->db->order_by('Table1.col3');
$this->db->where('Table1.col1', '2');
$this->db->where('Table1.col2', '2');
$this->db->where('Table2.col4', '101');
$res=$this->db->get();
Мой код для случая 2 ниже:
$this->db->select('Table1.*, Table2.*');
$this->db->from('Table2');
$this->db->join('Table1', 'Table1.col3=Table2.col5','right');
$this->db->order_by('Table1.col3');
$this->db->where('Table1.col1', '2');
$this->db->where('Table1.col2', '2');
$this->db->where('Table2.col4', '101');
$this->db->where('Table2.col5 IS NULL');
$res=$this->db->get();
Мой код для случая 3ниже:
$this->db->select('Table1.*, Table2.*');
$this->db->from('Table2');
$this->db->join('Table1', 'Table1.col3=Table2.col5','left');
$this->db->order_by('Table1.col3');
$this->db->where('Table1.col1', '2');
$this->db->where('Table1.col2', '2');
$this->db->where('Table2.col4', '101');
$this->db->where('Table2.col5 IS NULL');
$res=$this->db->get();
Но все работает не так, как ожидалось. Если мы рассмотрим col1 и col2, случаи 2 и 3 не показывают результатов. Если мы пропустим col1 и col 2, результаты все равно не будут точными. Пожалуйста, предложите правильные коды.