2014-12-08 2 views
0

у меня есть запрос SQL, который возвращает массив так:Заказать MYSQL Результат по ссылкам в пределах результате

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 

, потому что третья колонка показывает, что идентификатор, после которого текущий элемент следующим образом.

Есть ли способ поместить это в SQL-запрос? Решение для сортировки массива впоследствии с PHP также было бы приемлемым.

+1

Вы уверены, что у вас есть необходимый порядок правильного ?? – RiggsFolly

+0

Что такое кавычки? – Strawberry

+1

Если бы это был я, я бы вернулся к исходному запросу. – Strawberry

ответ

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

+0

спасибо - насколько я понимаю, это означает, что мне нужно знать количество элементов. но они могут варьироваться и не обязательно должны быть точно 7 .. – cukabeka

Смежные вопросы