我有一个问题要问。首先,我有一个表格,其中父级parent_id
为0
,且子级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();
}
答案 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