Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak osiągnąć takie sortowanie ?
Forum PHP.pl > Forum > Bazy danych > MySQL
sawic
Witam,

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:
  1. SELECT k.id AS kid, k.kategoria, p.id AS pid, p.pozycja, p.podpoz_do_poz, p.podpozycja
  2. FROM db.kategorie AS k INNER JOIN db.pozycje AS p ON k.id=p.kat
  3. ORDER BY questionmark.gif?



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
teutates
A no jednak mozna:)
  1. ORDER BY col1 ASC, col2 DESC

w czym problem?
sawic
Cytat(teutates @ 26.05.2008, 21:56:07 ) *
A no jednak mozna:)
  1. ORDER BY col1 ASC, col2 DESC

w czym problem?

dry.gif
A przeczytałeś w ogóle co pisałem ?
Ale ja rozumiem - mój błąd, bo widocznie za słabo opisałem problem.


To co chcę osiągnąć dało by się przez CONCAT(), ale wolał bym tego uniknąć.

Wtedy sortował bym przez p.kolejnosc ASC przy warunku WHERE podpoz_do_poz IS NULL, a następnie dla każdego wiersza wyciągał bym za pomocą CONCAT() wszystkie podpozycje dla danej pozycji w jakiejś kolejności przy warunku WHERE t2.podpoz_do_poz = t1.id.


Chcę oczywiście tego uniknąć, bo chodzi mi tylko o zwykłe sortowanie.

Pozdrawiam
JoShiMa
Ale chociaż spróbowałeś tego co teutates napisał?
sawic
Cytat(JoShiMa @ 27.05.2008, 14:30:43 ) *
Ale chociaż spróbowałeś tego co teutates napisał?

Panowie - nie bądźcie śmieszni.
Przeczytajcie ze zrozumieniem co napisałem.
Zaproponowany wyżej sposób nie może działać.

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