1

我有一个问题要问。首先,我有一个表,其中父母有parent_idis0并且孩子有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();
    }
4

3 回答 3

3

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

你有两个选择:

1.查询所有孩子,然后使用PHP根据解码的JSON过滤它们

2.使用mysqllike匹配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 用"引号括起来,则将它们添加到参数中

于 2013-08-06T17:36:18.523 回答
1

你确定你不是这个意思

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

?

于 2013-08-06T17:19:38.217 回答
0

的尝试where_in子句active records

function get_child_product($parent_id, $limit, $start) {
    $this -> db -> from('product');
    $this -> db -> where_in( parent_id, decoded($parent_id) ); #changes here
    $this -> db -> limit($limit, $start);
    $this -> db -> order_by('order', 'asc');
    $this -> db -> order_by('id', 'desc');
    $query = $this -> db -> get();
    return $query -> result();
}
于 2013-08-06T17:23:30.677 回答