Zadałem to zapytanie na pl.comp.bazy-danych, ale od dwóch dni nie uzyskałem odpowiedzi, więc spróbuję tutaj.
Baza MySQL 5, mam taką zawartość tabel:
CODE
kategorie:
id | kategoria | kolejnosc
-----------------------------------
1 | kategoria1 | 1
2 | kategoria2 | 2
3 | kategoria3 | 3
CODE
pozycje:
id | pozycja | kat | podpoz_do_poz | podpozycja | kolejnosc
--------------------------------------------------------------------
1 | pozycja1 | 2 | NULL | podpozycja | 1
2 | pozycja1 | 2 | 1 | podpozycja1 | 1
3 | pozycja1 | 2 | 1 | podpozycja2 | 2
4 | pozycja1 | 2 | 1 | podpozycja3 | 3
5 | pozycja2 | 1 | NULL | podpozycja | 1
6 | pozycja3 | 3 | NULL | podpozycja | 1
7 | pozycja4 | 3 | NULL | podpozycja | 2
8 | pozycja3 | 3 | 6 | podpozycja1 | 1
9 | pozycja3 | 3 | 6 | podpozycja2 | 2
10 | pozycja3 | 3 | 6 | podpozycja3 | 3
11 | pozycja3 | 3 | 6 | podpozycja4 | 4
Następnie odczytuję to, przez:
SELECT k.id AS kid, k.kategoria, p.id AS pid, p.pozycja, p.podpoz_do_poz, p.podpozycja FROM db.kategorie AS k INNER JOIN db.pozycje AS p ON k.id=p.kat ORDER BY?
Chciałbym aby zostało to posortowane, po kolejności kategorii, następnie po kolejności pozycji, a następnie po kolejności podpozycji dla każdej z pozycji. Problem tkwi w tym, że pozycje i podpozycje są w jednej tabeli. Żeby można było jako parametr podać parę kolumn to by było ok.
Czyli chciałbym otrzymać coś takiego:
CODE
kid | kategoria | pid | pozycja | podpoz_do_poz | podpozycja
----------------------------------------------------------------
1 | kategoria1 | 5 | pozycja2 | NULL | podpozycja
2 | kategoria2 | 1 | pozycja1 | NULL | podpozycja
2 | kategoria2 | 2 | pozycja1 | 1 | podpozycja1
2 | kategoria2 | 3 | pozycja1 | 1 | podpozycja2
2 | kategoria2 | 4 | pozycja1 | 1 | podpozycja3
3 | kategoria3 | 6 | pozycja3 | NULL | podpozycja
3 | kategoria3 | 8 | pozycja3 | 6 | podpozycja1
3 | kategoria3 | 8 | pozycja3 | 6 | podpozycja2
3 | kategoria3 | 10 | pozycja3 | 6 | podpozycja3
3 | kategoria3 | 11 | pozycja3 | 6 | podpozycja4
3 | kategoria3 | 7 | pozycja4 | NULL | podpozycja
Mam nadzieję, że wystarczająco napisałem o co mi chodzi i z góry dziękuję za wszystkie odpowiedzi.
Pozdrawiam