通过结果中的引用来订购MYSQL结果

时间:2014-12-08 15:58:20

标签: php mysql sorting

我有一个返回如下数组的SQL查询:

nr|id    |reference
#1|"1311"|"0"
#2|"1731"|"1260"
#3|"1332"|"1261"
#4|"1312"|"1311"
#5|"1316"|"1312"
#6|"1261"|"1316"
#7|"1260"|"1332"

现在的问题是第二列和第三列代表了项目的顺序,所以上面数组的正确顺序是

1 - 4 - 5 - 6 - 3 - 7 - 2

因为第3列告诉当前项目后面的id是什么。

有没有办法把它放到SQL查询中?之后用PHP对数组进行排序的解决方案也是可以接受的。

1 个答案:

答案 0 :(得分:0)

请注意,MySQL不支持递归,因此您必须以某种方式发明它,或者(更好地)重新排列您的问题,以便它不需要它。无论如何,只是为了好玩,这里有各种各样的解决方案......(注意:我用NULL代表孤儿)

SELECT *, FIND_IN_SET(nr,(
SELECT CONCAT_WS(',',a.nr,b.nr,c.nr,d.nr,e.nr,f.nr,g.nr) 
     FROM my_table a 
     LEFT 
     JOIN my_table b 
       ON b.reference = a.id 
     LEFT 
     JOIN my_table c 
       ON c.reference = b.id 
     LEFT 
     JOIN my_table d 
       ON d.reference = c.id 
     LEFT 
     JOIN my_table e 
       ON e.reference = d.id 
     LEFT 
     JOIN my_table f 
       ON f.reference = e.id 
     LEFT 
     JOIN my_table g 
       ON g.reference = f.id  
     LEFT 
     JOIN my_table h 
       ON h.reference = g.id 
    WHERE a.reference IS NULL
 )) a FROM my_table ORDER BY a;

http://www.sqlfiddle.com/#!2/347578/1