mysql | PHP |在自己的表中联接
我不知道我做的是对还是错,请不要评判我。。。 我想做的是,如果一个记录属于父记录,那么它将有一个与之关联的父id。。让我在下面向您展示我的表模式 我有两个专栏 项目类别ID& ItemParentCategoryID 假设mysql | PHP |在自己的表中联接,php,mysql,codeigniter,Php,Mysql,Codeigniter,我不知道我做的是对还是错,请不要评判我。。。 我想做的是,如果一个记录属于父记录,那么它将有一个与之关联的父id。。让我在下面向您展示我的表模式 我有两个专栏 项目类别ID& ItemParentCategoryID 假设ItemCategoryID=4上的记录属于ItemCategoryID=2,则ID 4上的列ItemParentCategoryID的ID为ItemCategoryID 我的意思是在自己的表中有一个循环 但问题是如何运行select查询:p 我的意思是显示所有父母和孩子各自
ItemCategoryID=4
上的记录属于ItemCategoryID=2
,则ID 4上的列ItemParentCategoryID的ID为ItemCategoryID
我的意思是在自己的表中有一个循环
但问题是如何运行select查询:p
我的意思是显示所有父母和孩子各自的父母。我认为你不想/可以在你的查询中这样做,因为你可以在很长的一段时间内嵌套 您应该创建一个getChilds函数,在检索类别时调用它自己。这样可以嵌套2个以上的级别
function getCategory()
{
// Retrieve the category
// Get childs
$childs = $this->getCategoryByParent($categoryId);
}
function getCategorysByParent($parentId)
{
// Get category
// Get childs again.
}
试试这个:
function all_categories(){
$data = array();
$first = $this->db->select('itemParentCategoryId')->group_by('itemParentCategoryId')->get('table')->result_array();
if( isset( $first ) && is_array( $first ) && count( $first ) > 0 ){
foreach( $first as $key => $each ){
$second = $this->db->select('itemCategoryId, categoryName')->where_in('itemParentCategoryId', $each['itemParentCategoryId'])->get('table')->result_array();
$data[$key]['itemParentCategoryId'] = $each['itemParentCategoryId'];
$data[$key]['subs'] = $second;
}
}
print_r( $data );
}
这通常是一个懒惰的设计选择。理想情况下,您需要这些关系的表格或/和一组深度。如果
parent\u id
的父对象可以拥有自己的parent\u id
,这意味着潜在的无限深度
MySQL不太喜欢无限嵌套深度。但我不介意。要么在循环中运行多个查询,例如NIL'Z'S1,要么考虑在PHP中获取所有行并将它们排序为数组。最后一个解决方案很好,如果您几乎总是获取所有行,从而使MySQL过滤过时
最后,考虑一下在数据库结构中是否可以有更理想的方法。不要害怕使用多张桌子
MySQL不支持递归查询。通过模拟递归查询是可能的,但这是一种低级的、次优的方法
有,这些结构允许非常有效的查询。这个问题经常出现,我甚至懒得抱怨你不能使用谷歌或其他搜索工具,或者提供冗长的解释 这里-使用我创建的库:这样就不会破坏数据库