Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Pobieranie id wiersza z kolumny z poprzedniego wiersza
Forum PHP.pl > Forum > Bazy danych
neo1986kk
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
  1. 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


Ale zwraca coś takiego
id|next

3 | 5
2 | 7
7 | 3

Czyli nie po kolei i bez pierwszego wiersza

  1. 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

Ok, mam wszystkie, ale w złej kolejności, no i nie wiem jak zacząć od id przykładowo 7

1 | 2
3 | 5
2 | 7
7 | 3

Strukturalnie to bym to zrobił mniejwięcej tak:




  1. function getNext($id){
  2. sql: Select next from t where id=$id;
  3. return $ret[0];
  4. }
  5. if(getNext(3)>0){
  6. getNext(getNext(3))
  7. }


No i wiadomo to w jakąś pętlę, ale pomyślałem, że może dało by się zrobić to jednym zapytaniem SQL
viking
Nie bardzo rozumiem wg jakiej logiki 2 7 3 5 jest po kolei
trueblue
Wartość next wskazuje jakie kolejne id pobrać.
viking
No to najłatwiej

  1. WITH RECURSIVE cte (`id`, `next`) AS
  2. (
  3. SELECT MIN(id) AS id, next FROM test
  4. UNION ALL
  5. SELECT t2.id, t2.`next` FROM test AS t2
  6. INNER JOIN test ON t2.id = test.next
  7. )
  8. SELECT * FROM cte
  9. -- WHERE id > 2;


Aha, staraj się nie używać słów zastrzeżonych jako nazw https://dev.mysql.com/doc/refman/8.0/en/key...-8-0-detailed-N
neo1986kk
Zagłębiając się w temat, rzeczywiście to najlepsza droga, niestety każdy edytor wywala błąd składni przy WITH
viking
To straszne. Zmień edytor.
neo1986kk
Cytat(viking @ 26.03.2022, 17:10:06 ) *
To straszne. Zmień edytor.


Chodziło mi o phpmyadmin, workbench, dBeaver i DataBase Workbench Lite, a nie o edytor tekstowy facepalmxd.gif

Żaden nie wykonuje tego zapytania.

Moja wersja SQL 10.1.19 - MariaDB
viking
10.2.10-MariaDB
neo1986kk
Doczytałem, że rercursive działa od wersji 10.2.1, dzięki zrobię update i pewnie będzie wszystko śmigać
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.