Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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 经典结构-自连接数据库表,列表_Mysql_Sql_Join - Fatal编程技术网

Mysql 经典结构-自连接数据库表,列表

Mysql 经典结构-自连接数据库表,列表,mysql,sql,join,Mysql,Sql,Join,我有以下资料: ID NAME PAREN_ID 1 a null 2 b null 3 c 2 4 d 3 我想列出ID 4项及其所有父项,因此我想获得: 4 d 3 3 c 2 2 b null 我试过一些东西: SELECT * FROM categories c1 JOIN categories c2 ON c2.ID = c1.PARENT_ID; 但这不是一个好结果,即使我尝试过滤到ID 4,它也不会返回任何结果。 是MySQL 我真

我有以下资料:

ID NAME PAREN_ID
1   a    null
2   b    null
3   c     2
4   d     3
我想列出ID 4项及其所有父项,因此我想获得:

4 d 3
3 c 2
2 b null
我试过一些东西:

SELECT * FROM categories c1
JOIN categories c2 ON c2.ID = c1.PARENT_ID;
但这不是一个好结果,即使我尝试过滤到ID 4,它也不会返回任何结果。
是MySQL

我真的不确定如何使用MySQL实现这一点。我认为你最好的办法是递归地获取所有内容

function getCategories( $id ) {
    $ret = array();
    $cat = mysql_query( 'SELECT * FROM categories' );
    $curid = $id;
    do {
        $ret[] = $cat[ $curid ];
        $curid = $cat[ $curid ][ 'PARENT_ID' ];
    } while ( $curid );
    return $ret;
}
您应该对其进行修改,使其使用PDO。


唯一的问题是查询返回的数据太多。

是的,它是MySQL,RDBMS在处理树状结构方面不是很好——但这正是您在这里看到的。我建议对你可能面临的潜在问题,以及解决这些问题的潜在方法,做一个很好的解释。提示:DB重新设计即将到来。请尝试使用闭包模型而不是邻接列表模型。