Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak osiągnąć takie sortowanie ?, Żeby można było jako parametr podać parę kolumn ...
sawic
post 26.05.2008, 21:49:03
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 24.05.2005

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
teutates
post 26.05.2008, 22:56:07
Post #2





Grupa: Zarejestrowani
Postów: 156
Pomógł: 2
Dołączył: 9.09.2006
Skąd: Londyn/Gdynia

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


A no jednak mozna:)
  1. ORDER BY col1 ASC, col2 DESC

w czym problem?
Go to the top of the page
+Quote Post
sawic
post 27.05.2008, 15:10:35
Post #3





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 24.05.2005

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


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
Go to the top of the page
+Quote Post
JoShiMa
post 27.05.2008, 15:30:43
Post #4





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Ale chociaż spróbowałeś tego co teutates napisał?


--------------------
Go to the top of the page
+Quote Post
sawic
post 27.05.2008, 15:42:22
Post #5





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 24.05.2005

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


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
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 29.06.2025 - 02:33