对mysql而言只能用php编程实现,一点都不慢

解决方案 »

  1.   

    用一门语言(比如PHP)编写一个递归调用的程序来操作数据库,虽然查询次数多一点,但是没有什么办法
      

  2.   

    这样的话,表结构是最重要的
    我记得有一个表结构是这样的
    id
    username //名子
    index_id //是否在同一个家
    taxis //级别
    parent_id //父,没有为0
    下面为例:
    id  username index_id taxis parent_id
    1    aa      1        0000      0
    2    bb1     1        0001      1
    3    bb2     1        0002      1
    4    bb3     1        0003      1
    5    cc1     1        00010001  2
    6    cc2     1        00010002  2
    能看明白吗,这个是同一个家的由index_id决定,也就是taxis为0000的,
    儿子是2,3,4第二个儿子的儿子是5,6
    这样的话一条语句就可以了
    select * from table where <条件> order by index_id, taxis
      

  3.   

    http://expert.csdn.net/Expert/topic/2158/2158259.xml?temp=.8988306
      

  4.   

    xizi2002您的回答对我有一定的启发,但还是没有找到解决的办法!比如:一个家庭肯定有祖宗十八代之多,如果按您的方法taxis这个字段那得多大呀!再说aa也有可能是别人的儿子呀!
      

  5.   

    xjw008(xjw):呵呵,就算他有40代.40*4=160个.taxis不过160个字符串吧.
    不过你说的aa也有可能是别人的儿子是可以确定的.呵呵~~
      

  6.   

    刚才作了以下测试,感觉这样写是可以的id username up
    1   abc     
    2   efg     abc
    3   hij     abc
    4   kln     efg
    5   xyz     efg
    6   xxx     abcSELECT *,if(up='',username,up) as pp FROM `test1` order by pp,up

    id username up   pp
    1   abc          abc
    2   efg     abc  abc
    3   hij     abc  abc
    6   xxx     abc  abc
    4   kln     efg  efg
    5   xyz     efg  efg
      

  7.   

    xuzuning(唠叨)  谢谢您的回答,if(up='',username,up) as pp  是什么意思? pp是作什么用的!整个程序作何理解?再次感谢!
      

  8.   

    if(up='',username,up) as pp  
    如果up字段为空则取username字段内容,可理解为没有父亲的节点的父亲为自己派生出的字段pp为排序用,以便将同一组的记录归在一起不过这个方法只适用于二级,多了时不好弄。
    xizi2002(☆☆戏☆子☆☆) 的方法可以,只是给taxis赋值是很麻烦的事情。因为他要罗列全部的父节点按你的数据组织方式,通用点的还是编程
    读取全部记录到数组(按up字段排序)
    然后用递归函数遍历数组,以生成新数组。按你的数据组织方式,一个儿子只会有一个父亲,一个父亲可能有多个儿子
      

  9.   

    xuzuning(唠叨), xizi2002(☆☆戏☆子☆☆)
    给出的方法不错,值得学习对于这个问题,最好是先读到数组,再用数组遍历