Codeigniter Active Record记录JSON对象中的值

时间:2013-08-06 17:15:57

标签: mysql codeigniter

我有一个问题要问。首先,我有一个表格,其中父级parent_id0,且子级parent_id父级ID相等。所有子节点中的parent_id都存储为json编码数组(一个子记录可以有多个父节点)。

那么,当我传递一个父ID时,如何获得父母的所有孩子。我试过但它不会起作用,我也没有线索。

以下是代码:

function get_child_product($parent_id, $limit, $start) {
        $this -> db -> from('product');
        $this -> db -> where(json_decode('parent_id'), $parent_id);
        $this -> db -> limit($limit, $start);
        $this -> db -> order_by('order', 'asc');
        $this -> db -> order_by('id', 'desc');
        $query = $this -> db -> get();
        return $query -> result();
    }

问题解决了:

function get_child_product($parent_id, $limit, $start) {
        $this -> db -> from('product');
        $this -> db -> like('parent_id', '"' . $parent_id . '"');
        $this -> db -> limit($limit, $start);
        $this -> db -> order_by('order', 'asc');
        $this -> db -> order_by('id', 'desc');
        $query = $this -> db -> get();
        return $query -> result();
    }

3 个答案:

答案 0 :(得分:3)

如果我理解正确,您的数据库中有一个JSON编码的数组与父关系,并且您只想获得某个父项的子项。问题是数据库中的JSON对象只不过是字符串,您无法在查询中动态解码它们并使用where子句。

您有两种选择:

1.查询所有孩子然后使用PHP根据解码的JSON

过滤它们

2.使用mysql like匹配json格式的字符串

function get_child_product($parent_id, $limit, $start) {
    return $this -> db -> from('product')
                    -> like('parent_id', '"parent_id":'.$parent_id)
                    -> limit($limit, $start)
                    -> order_by('order', 'asc')
                    -> order_by('id', 'desc')
                    -> get()
                    -> result();
}

请注意,like参数应与您的JSON语法相匹配,因此,如果您的ID包含在"引号中,则将它们添加到参数

答案 1 :(得分:1)

你确定你的意思

where('parent_id', decoded($parent_id));

答案 2 :(得分:0)

尝试where_in的{​​{1}}条款:

active records