Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL] Pobieranie id wiersza z kolumny z poprzedniego wiersza
neo1986kk
post 25.03.2022, 21:04:36
Post #1





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

Ostrzeżenie: (0%)
-----


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

Ten post edytował neo1986kk 25.03.2022, 21:22:57
Go to the top of the page
+Quote Post
viking
post 26.03.2022, 06:14:56
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Nie bardzo rozumiem wg jakiej logiki 2 7 3 5 jest po kolei


--------------------
Go to the top of the page
+Quote Post
trueblue
post 26.03.2022, 08:12:33
Post #3





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Wartość next wskazuje jakie kolejne id pobrać.


--------------------
Go to the top of the page
+Quote Post
viking
post 26.03.2022, 14:16:17
Post #4





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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

Ten post edytował viking 26.03.2022, 14:17:24


--------------------
Go to the top of the page
+Quote Post
neo1986kk
post 26.03.2022, 15:32:20
Post #5





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

Ostrzeżenie: (0%)
-----


Zagłębiając się w temat, rzeczywiście to najlepsza droga, niestety każdy edytor wywala błąd składni przy WITH
Go to the top of the page
+Quote Post
viking
post 26.03.2022, 17:10:06
Post #6





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


To straszne. Zmień edytor.


--------------------
Go to the top of the page
+Quote Post
neo1986kk
post 26.03.2022, 18:21:02
Post #7





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

Ostrzeżenie: (0%)
-----


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

Ten post edytował neo1986kk 26.03.2022, 18:48:43
Go to the top of the page
+Quote Post
viking
post 26.03.2022, 19:22:35
Post #8





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


10.2.10-MariaDB


--------------------
Go to the top of the page
+Quote Post
neo1986kk
post 26.03.2022, 20:29:57
Post #9





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

Ostrzeżenie: (0%)
-----


Doczytałem, że rercursive działa od wersji 10.2.1, dzięki zrobię update i pewnie będzie wszystko śmigać
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
3 Użytkowników czyta ten temat (3 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 20:24