id | next
1 | 2
3 | 5
2 | 7
7 | 3
Chciałbym uzyskać
id | next
1 | 2
2 | 7
7 | 3
3 | 5
Czyli po kolei każdy next począwszy od id 1.
I dla chętnych począwszy od wybranego id na przykład zaczynając od 7
id|next
7|3
3|5
Wymyśliłem coś takiego
SELECT t.id, t.next AS next FROM (SELECT t1.id, t1.next FROM TABLE t LEFT JOIN TABLE t1 ON t1.id=t.next) AS t
SELECT t.id, t.next AS next FROM (SELECT t1.id, t1.id FROM TABLE t1 LEFT JOIN TABLE t2 ON t2.id=t1.next) AS t
function getNext($id){ sql: Select http://www.php.net/next from t where id=$id; return $ret[0]; } if(getNext(3)>0){ getNext(getNext(3)) }
Nie bardzo rozumiem wg jakiej logiki 2 7 3 5 jest po kolei
Wartość next wskazuje jakie kolejne id pobrać.
No to najłatwiej
WITH RECURSIVE cte (`id`, `next`) AS ( SELECT MIN(id) AS id, next FROM test UNION ALL SELECT t2.id, t2.`next` FROM test AS t2 INNER JOIN test ON t2.id = test.next ) SELECT * FROM cte -- WHERE id > 2;
Zagłębiając się w temat, rzeczywiście to najlepsza droga, niestety każdy edytor wywala błąd składni przy WITH
To straszne. Zmień edytor.
10.2.10-MariaDB
https://www.fotosik.pl/zdjecie/dcf8b52e4843b417
Doczytałem, że rercursive działa od wersji 10.2.1, dzięki zrobię update i pewnie będzie wszystko śmigać
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)