来一个递归WITH FUCK AS
(
SELECT * FROM category WHERE Id=10000
UNION ALL
SELECT * FROM FUCK INNER JOIN category 
ON FUCK.Id=category.pid
)SELECT * FROM FUCK

解决方案 »

  1.   


    --貌似楼主并没有说要搜索二级类以及它子节点的产品。只是要二级类的产品。SQL如:select a.* from product a,category  b
    where a.category_id =b.id and 
    exists(select 1 from category where pid=0 and id=b.pid)
      

  2.   

    select id,name from product where (category_id in (select id form category where pid=二级分类id))
      

  3.   

    用递归的话效率很有问题哦,,程序跟sql结合的话,,最有效率的方法是怎样的?数据库的自动如果不够用的话,还可以添加,谢谢回复
      

  4.   

    最好就是修改一下数据库把pid也放在产品表里保存....
      

  5.   

       我不知道这种方案可行否,搜先检查出2级类的id来为12000,然后截掉后面的000,(因为id是统一5个字符,都是有规律的),然后通过sql的
    select * from product where category_id like 12%
    这样是否可行?效率是不是比递归好很多呢?
      

  6.   

    搜先检查出2级类的id来为12000,然后截掉后面的000,(因为id是统一5个字符,都是有规律的),然后通过sql的
    select * from product where category_id like 12%
    还有一种,首先把类别表的数据通过程序缓存一下,然后,当别人按照类别搜索的时候,从缓存中取出他所有的子类的id值,然后通过
    select * from product where category_id in (缓存类别id)还有就是,从缓存中查询出子类别id后,select * from product where category_id=? or category_id=?。
    或者直接递归查询需要的数据WITH FUCK AS 

    SELECT * FROM category WHERE Id=10000 
    UNION ALL 
    SELECT * FROM FUCK INNER JOIN category 
    ON FUCK.Id=category.pid 
    )SELECT * FROM FUCK 
    哪种效率好呢?或者有更好的办法?