Order results from a query of a flat table
我有一个非常基本的单表场景;
让我们添加以下行:
1 2 3 4 5 6 7 8 | entryID : name : parentID 1 : Grandmother Jones : 0 2 : Grandmother Thompson : 0 3 : Mother Jones : 1 4 : Mother Thompson : 2 5 : 1st Daughter Jones : 3 6 : 2nd Daughter Jones : 3 7 : 1st Daughter Thompson : 4 |
号
这里我们有两个家族的三代人,琼斯家族和汤普森家族(作为例子)。我想查询这个表,但是按parentID对结果进行排序(但不象普通的旧
1 2 3 4 5 6 7 8 9 |
逻辑上,我能看到的唯一方法是循环访问所有entryid,然后循环访问每个entryid;循环访问所有其他记录,根据当前entryid检查它们的parentid字段,并将这些记录置于当前行下结果集的顶部。但我不知道如何在MySQL中做到这一点。
更新
我已经使用了Families作为上面的例子,但是我所追求的是一种方法,它存储嵌套的条目,并将它们放在一个查询中,以提高效率。我可以提出多个
1 2 3 4 5 6 7 8 |
。
第二次更新
你可以忘记
"但我不知道如何在MySQL中做到这一点。"
简短的回答
你不能。
回答稍微长一点。
您试图解决的问题不是关系数据库能够很好地解决的问题。您要做的是需要一个对象关系数据库。
对于这一理论,我建议阅读两者的区别:
http://en.wikipedia.org/wiki/relational_数据库
http://en.wikipedia.org/wiki/object-relational_数据库
还有关于stackoverflow的问题,关于为什么每个都是好的/坏的。
https://stackoverflow.com/questions/800/object-oriented-vs-relational-databases或关系数据库中面向对象的类结构
包括以下答案:https://stackoverflow.com/a/600765/778719计算机科学的越南。
实际上,这更多的是关于对象映射到关系数据库,但它确实向您展示了您刚刚遇到的问题的深度(以及缺乏明显的解决方案)。
在实际需要另一个时使用一个的实际问题称为对象关系阻抗不匹配。http://en.wikipedia.org/wiki/object-relationalu阻抗不匹配
实际上可能有用的答案
您描述的问题是最好由对象处理的问题。我建议暂时将它们存储在关系数据库中,只接受这样一个事实:您的逻辑需要存在于应用程序代码层,而不是SQL层,因此,如果需要获取每个"对象"或可能每个"层"的对象,可以对数据库进行多次查询。
这将一直持续到某一时刻,在这一时刻,您将更好地理解问题,并处于更好的位置,可以使用不同的技术,或者至少了解不同解决方案之间的权衡。
可怕的奖金
家族树软件中的循环