我有一个返回如下数组的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对数组进行排序的解决方案也是可以接受的。
答案 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;