现在有两张表:
产品目录表:sort
产品表:content而sort表是树型目录例:
id   pid   name
1     0   一级栏目A
2     0   一级栏目B
3     1   A级栏目下的二级栏目A
4     1   A级栏目下的二级栏目B
5     3   A级栏目下的二级栏目A下的三级目录
6     3   A级栏目下的二级栏目A下的三级目录
注:一级栏目不可以添加产品,但二级栏目以下(包括二级栏目)是可以添加产品的。
现在问题是:
我要从content表列出所有一级栏目A下的产品出来,也就是说要列出属于一级栏目A下的二级栏目和三级栏目的产品出来,content表的pid是和它所属的当前栏目的id相关联

解决方案 »

  1.   

    LZ的设计不行啊,你怎么知道 A级栏目下的二级栏目A下的三级目录  这种是目录还是产品啊
      

  2.   

    如果要实现的话只能存储过程啦,一个SQL语句是解决不了问题的
      

  3.   

    因为第二级栏目的pId等于一级栏目的id,三级栏目的pId又等于二级栏目的id,以经类推下去可以形成多级目录的呀,现在需要判断如果二级栏目下面没有相关三级目录时它的id就等于content产品表中的产品pId了,否则产品表的PID就等于二级栏目下面相关的三级目录中的id值。
      

  4.   

    终于想到一个办法了,我在content1表中新建一个字段是记录第一级目录的ID,在添加产品时自动判断第一级目录的ID并保存,如:
    <!--得出第二级目录--!>
    $sql = "select name,id,pId from pro1Sort1 where id=$i_pId order by id asc";
    $rsP = &$conn->Execute($sql);
    if (false === $rsP || $rsP->EOF)
    {
    }
    else
    {
      $sortPid= stripslashes($rsP->fields("pId"));
      $rsP->Close();
    }<!--得出第三级目录--!>
    $sql = "select name,id,pId from pro1Sort1 where id=$sortPid order by id asc";
    $rsP = &$conn->Execute($sql);
    if (false === $rsP || $rsP->EOF)
    {
    }
    else
    {
      $sortPid1 =stripslashes($rsP->fields("pId"));
      $sortId =stripslashes($rsP->fields("id"));
      $rsP->Close();
    }<!--得出第一级目录--!>
    $sql = "select name,id,pId from pro1Sort1 where id=$sortPid1 order by id asc";
    $rsP = &$conn->Execute($sql);
    if (false === $rsP || $rsP->EOF)
    {
    }
    else
    {
      $sortId1 =stripslashes($rsP->fields("id"));
      $rsP->Close();
    }
    <!--判断结果--!>
    if($sortId1==""){ //<!--当第三级的id为空时记录第二级的id--!>
    $i_proID = $sortId;
    }else{
    $i_proID = $sortId1;//<!--记录第一级的id--!>
    }