Encomendar Resultado MYSQL por referências dentro de um resultado

votos
0

Eu tenho uma consulta SQL que retorna uma matriz como este:

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

agora o problema é que a 2ª coluna ea 3ª coluna representam a ordem dos itens, então a ordem correta da matriz acima seria

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

porque a 3ª coluna diz o que o id é após o qual o item atual segue.

Existe alguma maneira de colocar isso em uma consulta SQL? Uma solução para classificar a matriz depois com PHP seria aceitável também.

Publicado 08/12/2014 em 15:58
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Note que o MySQL não suporta recursão, então você tem que inventá-lo de alguma forma ou (melhor) reorganizar o seu problema para que ele não exige isso. De qualquer forma, apenas por diversão, aqui está uma solução de tipo ... (Nota: Eu usei NULL para representar órfãos)

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

Respondeu 08/12/2014 em 16:39
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more