Codeigniter 3 - Query Builder оператор 'join' Method '! =' Не дает ожидаемого результата - PullRequest
0 голосов
/ 13 мая 2018

Не повторяющийся вопрос !!!


Я использую CodeIgniter 3 - Класс построителя запросов с MySQLi .


Таблицы в БД:

' category_level_1 ' Таблица:
enter image description here

' category_level_2 ' Таблица:
enter image description here


Запрос в model.php:

$query = $this->db
  ->select('category_level_1.id, category_level_1.category')
  ->from('category_level_1')
  ->join('category_level_2', 'category_level_2.cat_lvl1_id != category_level_1.id', 'inner')
  ->group_by('category_level_1.id')
  ->get();

Выход:

enter image description here
Inner-Join не работает.


Ожидаемый результат:

enter image description here
Необходимо выводить только записи в таблице 'category_level_1', которые не связаны с таблицей 'category_level_2'.


Проблема:

Как показано выше, выходные значения не соответствуют ожидаемым в соответствии с оператором ! = , не работает с «внутренним» соединением .

Ответы [ 3 ]

0 голосов
/ 13 мая 2018

Я предлагаю вам попробовать использовать условия left или right join и where. Попробуйте следующее:

$query = $this->db
  ->select('category_level_1.id, category_level_1.category')
  ->from('category_level_1')
  ->join('category_level_2', 'category_level_2.cat_lvl1_id = category_level_1.id', 'left')
  ->where('category_level_2.cat_lvl1_id IS NULL')
  ->group_by('category_level_1.id')
  ->get();
0 голосов
/ 14 мая 2018

Надеюсь, это поможет вам:

$sql = "SELECT id, category 
        FROM category_level_1
        WHERE id NOT IN (SELECT DISTINCT cat_lvl1_id FROM category_level_2)";
$query = $this->db->query($sql);
print_r($query->result());

Вывод:

Array
(
    [0] => stdClass Object
        (
            [id] => 93
            [category] => dummy
        )
)
0 голосов
/ 13 мая 2018
$query = $this->db ->select('category_level_1.id, category_level_1.category') ->from('category_level_1') ->join('category_level_2', 'category_level_2.cat_lvl1_id <> category_level_1.id', 'inner') ->group_by('category_level_1.id') ->get();
...