mysql 不像oracle一样支持递归查询,也不支持 select * from () 这种子查询,所以目前没有什么好的解决方案。。

解决方案 »

  1.   


    SELECT a.id, a.name, GROUP_CONCAT( b.name ) AS
    NAMES , GROUP_CONCAT( b.id ) AS ids
    FROM product a
    LEFT JOIN product b ON a.id = b.parent_id
    WHERE a.parent_id =0
    GROUP BY b.parent_id
    我这样查询出来的数据基本够用,但是如果父级下面的子集为空,那么就不能查询出来,能看有优化的余地么?
      

  2.   

    你确定这么做可行??刚刚我在oracle中执行报错 :不是group by 表达式。。
      

  3.   

    既然你是两级的,用不着那么麻烦吧...
    直接组成两个数组..一个父类,一个子类$query = mysql_query("select id,name,parent_id from product");
    while($row = mysql_fetch_array($query)){
    if ($row['2'] ==0){
    $parientList[$row['0']]=$row['1'];
    }else{
    $childList[$row['2']][$row['0]]=$row['1'];
    }
    }这样要用父类的就用父类的数组..用子类的就用子类...
    很简单..
      

  4.   

    MYSQL 支持这种查询 , 只是 from 后边那个 括号中的内容是一条查询语句 ,并给括号后边起一个 别名 即可 
      

  5.   

    只要你使用 group by 关键字 分组,最终查询的结果 每个分组中只能保留一条(遇到的第一条)