id和subid上的顺序

时间:2017-08-28 12:26:22

标签: mysql sql

我有这个MySql表(默认按id排序):

id subid value
1  0     value 1
2  0     value 2
3  1     sub of 1
4  1     sub of 1
5  2     sub of 2
6  2     sub of 2
7  5     sub of 5

我需要一个返回列表的查询,按id和subid排序,如下所示:

1  0     value 1
3  1     sub of 1
4  1     sub of 1
2  0     value 2
5  2     sub of 2
7  5     sub of 5
6  2     sub of 2

所以,id的subs直接来自id行(在这个例子中,id1有2个subs,它们直接出现在id1的行下.id7有subid 5所以直接出现在id5的行下

潜艇可以无限深

我怎样才能得到这个结果?

谢谢!

3 个答案:

答案 0 :(得分:0)

尝试这样的事情:

SELECT ID,SUBID,Value
FROM TableName
ORDER BY RIGHT(Value,CHAR_LENGTH(SUBID)),ID

答案 1 :(得分:0)

感谢您回答人们,回复这样的数据似乎很难 请允许我向您提供有关我的目标的更多信息:
我在Laravel中构建一个项目,并希望按顺序显示数据,因为我使用了jQuery addon jQueryTreetable(http://ludo.cubicphuse.nl/jquery-treetable/),并且在他们的网站上你可以阅读这句话:

  

请注意,插件期望HTML表格中的行与它们应在树中显示的顺序相同。例如,假设您有三个节点:A,B(节点A的子节点)和C(节点B的子节点)。如果按照以下顺序A - C - B在HTML表中为这些节点创建行,则树将无法正确显示。您必须确保行的顺序为A - B - C.

也许解决方案可以是将数据转换为JSON格式,让javascript改变数据的顺序?

谢谢!

答案 2 :(得分:0)

与此同时,我找到了部分解决方案:

SELECT * FROM table ORDER BY IFNULL(parid, id)

这只是第一级的工作,但是对于额外的级别,我需要通过php函数运行结果来重新排序。

有人可以帮我解决这个问题吗?

此时我的结果是:

ID  SUBID VALUE
1   NULL  value 1
3   1     sub of 1 
4   1     sub of 1
2   NULL  value 2
5   2     sub of 2
6   2     sub of 2
7   5     sub of 5

如您所见,记录7必须在记录5之下(因为记录5是记录7的子记录)

有人可以帮我建立这个功能吗?