Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql | PHP |在自己的表中联接_Php_Mysql_Codeigniter - Fatal编程技术网

mysql | PHP |在自己的表中联接

mysql | PHP |在自己的表中联接,php,mysql,codeigniter,Php,Mysql,Codeigniter,我不知道我做的是对还是错,请不要评判我。。。 我想做的是,如果一个记录属于父记录,那么它将有一个与之关联的父id。。让我在下面向您展示我的表模式 我有两个专栏 项目类别ID& ItemParentCategoryID 假设ItemCategoryID=4上的记录属于ItemCategoryID=2,则ID 4上的列ItemParentCategoryID的ID为ItemCategoryID 我的意思是在自己的表中有一个循环 但问题是如何运行select查询:p 我的意思是显示所有父母和孩子各自

我不知道我做的是对还是错,请不要评判我。。。 我想做的是,如果一个记录属于父记录,那么它将有一个与之关联的父id。。让我在下面向您展示我的表模式

我有两个专栏 项目类别ID& ItemParentCategoryID

假设
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查询的数量无法控制,很容易失控

  • MySQL不支持递归查询。通过模拟递归查询是可能的,但这是一种低级的、次优的方法


    有,这些结构允许非常有效的查询。

    这个问题经常出现,我甚至懒得抱怨你不能使用谷歌或其他搜索工具,或者提供冗长的解释

    这里-使用我创建的库:这样就不会破坏数据库