表(abc)id fid
1   0
2   1
3   1
4   1
说明:
fid=0,说明是顶级栏目。
要求是,只给出你id,如何求出id为顶级栏目下的所有内容,如果id=2,那么也会显示它下面的内容。
只不过父类id=1,会显示的包括有:1,2,3,4,请问下要怎么写?

解决方案 »

  1.   


    select * from book where id in(select fid FROM book where id=2)
    union
    select * from book where fid in (select fid from book where id=2 )
      

  2.   


    可以先判断一下fid是不是0。
      

  3.   

    select * from abc where id=1 or fid=1
      

  4.   

    楼上写的不对,这样会返回1,2,3,4显然不符合楼主的要求
    我感觉这里应该用MYSQL里的IF判断
    应该是
    select if(fid=0,(select GROUP_CONCAT(id) from abc where fid=1 group by fid),fid)as result from abc  where id=1
    这里的GROUP_CONCAT是把多条记录合并为一条记录
    大致意思是:查询abc表如果这条记录的fid=0就执行SQL语句,查询fid=1的数据然后多条结合返回来,如果fid不为0就显示fid值
    但是有相问题就是select GROUP_CONCAT(id) from abc where fid=1 group by fid这个语句直接查询可以抬2,3,4但是放到子查询就只显示第一个,不知道是什么原因,还请高手帮忙看一下