获取未在表格中设置的职位

时间:2017-04-18 04:04:41

标签: codeigniter

我有一个名为职位的表,在该表中有4个职位

enter image description here

  

在我的模型函数下面,如果我的布局表有一个位置设置   我试图获得未设置的位置

目前只设置 column_left content_top

布局表

enter image description here

  

问题:从职位表中我如何获得未设置的职位。它应该能够 column_right content_bottom

public function getlayoutpositions($name) {
    $this->db->select('*');
    $this->db->from('layouts');
    $this->db->where('name', $name);
    $positions = $this->db->get();

    foreach ($positions->result_array() as $layouts) {

        $this->db->select('position');
        $this->db->from('positions');
        $this->db->where('position !=', $layouts['position']);
        $query = $this->db->get();

        return $query->result_array();
    }

}
  

返回错误只应显示column_right和content_bottom

Array
(
    [0] => Array
        (
            [position] => column_right
        )

    [1] => Array
        (
            [position] => content_top
        )

    [2] => Array
        (
            [position] => content_bottom
        )

)

3 个答案:

答案 0 :(得分:2)

在下面的代码中思考,你犯了一个小错误:

foreach ($positions->result_array() as $layouts) {

        $this->db->select('position');
        $this->db->from('positions');
        $this->db->where('position !=', $layouts['position']);
        $query = $this->db->get();

        return $query->result_array();
    }

在上面的代码中,For循环遍历所有布局对象(行)并在$layouts中为您提供数据。您只检查第一个$layouts对象并在POSITION表中找到它并返回结果。

您需要为从LAYOUT表中检索到的所有位置创建一个数组。 在For循环中,您应该填充该数组,意味着将$layouts['position']的值存储在该数组中。

因此,在循环之后,您将获得布局表中存在的所有位置的数组。

现在在For循环之后编写代码:

 $this->db->select('position');
 $this->db->from('positions');
 $this->db->where_not_in('position', /* Pass your array here */ );
 $query = $this->db->get();
 return $query->result_array();

我认为这有帮助。

答案 1 :(得分:1)

立即行动

控制器功能

public function index() {
    $positions = $this->getpositions($this->getlayoutpositions($this->router->class));

    echo '<pre>';
    print_r($positions);
    echo '</pre>';
}

模型功能

public function getpositions($positions = array()) {
    $this->db->select('*');
    $this->db->from('positions');

    foreach ($positions as $position) {
        $this->db->where('position !=', $position['position']);
    }

    $query = $this->db->get();
    return $query->result_array();
}

public function getlayoutpositions($name) {
    $this->db->select('*');
    $this->db->from('layouts');
    $this->db->where('name', $name);
    $query = $this->db->get();
    return $query->result_array();
}

正确的结果

Array
(
    [0] => Array
        (
            [position_id] => 2
            [position] => column_right
        )

    [1] => Array
        (
            [position_id] => 4
            [position] => content_bottom
        )

)

答案 2 :(得分:0)

尝试此查询 - 它可以简化那里的事情:

$query = $this->db->query('SELECT * FROM positions LEFT OUTER JOIN layouts ON positions.position = layouts.position WHERE layouts.layout_id IS null');