Po złożeniu selecta który składa się z kilku joinów, podzapytań itd. itp. otrzymuję w końcu zestaw danych (w uproszczeniu):
Kod
id | extra | order
----------------------
1 | 'value' | (1)
42 | null | 1
14 | 'value' | (2)
44 | null | 2
15 | null | 3
21 | 'value' | (4)
61 | null | 4
35 | null | 5
18 | 'value' | (6)
6 | null | 6
----------------------
1 | 'value' | (1)
42 | null | 1
14 | 'value' | (2)
44 | null | 2
15 | null | 3
21 | 'value' | (4)
61 | null | 4
35 | null | 5
18 | 'value' | (6)
6 | null | 6
I teraz potrzebuję posortować go w taki sposób że rekordy o orderze w nawiasie znajdują się na dokładnej pozycji którą zawierają (na pozycji z kolumny order) a reszta jest niejako uzupełnieniem pozycji które nie są ustawione (z zachowaniem ich kolejności). Każdy rekord z orderem z nawiasem posiada wartości w dodatkowych kolumnach a bez nawiasu nie posiada tych wartości więc po tym mogę je rozrózniać. Mam nadzieję że jasne o co chodzi, w prawidłowej kolejności dane powinny wyglądać:
Kod
id | extra | order
----------------------
1 | 'value' | (1)
14 | 'value' | (2)
42 | null | 1
21 | 'value' | (4)
44 | null | 2
18 | 'value' | (6)
15 | null | 3
61 | null | 4
35 | null | 5
6 | null | 6
----------------------
1 | 'value' | (1)
14 | 'value' | (2)
42 | null | 1
21 | 'value' | (4)
44 | null | 2
18 | 'value' | (6)
15 | null | 3
61 | null | 4
35 | null | 5
6 | null | 6
Próbowałem dodawać nowy licznik do którego dodawana ilość rekordów z orderami w nawiasie ich poprzedzająca dany rekord ale uzyskuję w ten sposób złą kolejność.... :
Kod
id | extra | order | id | extra | order | licznik | przy przepisywaniu pozycji z nawiasów (reszta po uzyskanej kolejnosci)
---------------------- | ---------------------------------------------------------------
1 | 'value' | (1) | 1 | 'value' | (1) | 1 + (0 nawiasów poprzedzających) = 1 | 1
14 | 'value' | (2) | 42 | 'value' | 1 | 1 + (1 nawias poprzedzający) = 2 | 2
42 | null | 1 | 14 | null | (2) | 2 + (1 nawias poprzedzający) = 3 | 2
21 | 'value' | (4) | 44 | null | 2 | 2 + (2 nawias poprzedzający) = 4 | 4
44 | null | 2 | 15 | null | 3 | 3 + (2 nawias poprzedzający) = 5 | 5
18 | 'value' | (6) | 21 | 'value' | (4) | 4 + (2 nawias poprzedzający) = 6 | 4
15 | null | 3 | 61 | null | 4 | 4 + (3 nawias poprzedzający) = 7 | 7
61 | null | 4 | 35 | null | 5 | 5 + (3 nawias poprzedzający) = 8 | 8
35 | null | 5 | 18 | 'value' | (6) | 6 + (3 nawias poprzedzający) = 9 | 6
6 | null | 6 | 6 | null | 6 | 6 + (4 nawias poprzedzający) = 10 | 10
prawidłowa kolejność uzyskana kolejność
---------------------- | ---------------------------------------------------------------
1 | 'value' | (1) | 1 | 'value' | (1) | 1 + (0 nawiasów poprzedzających) = 1 | 1
14 | 'value' | (2) | 42 | 'value' | 1 | 1 + (1 nawias poprzedzający) = 2 | 2
42 | null | 1 | 14 | null | (2) | 2 + (1 nawias poprzedzający) = 3 | 2
21 | 'value' | (4) | 44 | null | 2 | 2 + (2 nawias poprzedzający) = 4 | 4
44 | null | 2 | 15 | null | 3 | 3 + (2 nawias poprzedzający) = 5 | 5
18 | 'value' | (6) | 21 | 'value' | (4) | 4 + (2 nawias poprzedzający) = 6 | 4
15 | null | 3 | 61 | null | 4 | 4 + (3 nawias poprzedzający) = 7 | 7
61 | null | 4 | 35 | null | 5 | 5 + (3 nawias poprzedzający) = 8 | 8
35 | null | 5 | 18 | 'value' | (6) | 6 + (3 nawias poprzedzający) = 9 | 6
6 | null | 6 | 6 | null | 6 | 6 + (4 nawias poprzedzający) = 10 | 10
prawidłowa kolejność uzyskana kolejność
W obu sposobach jest zła kolejność. Może ktoś ma pomysł jak coś takiego rozwiązać ?
pozdrawiam