Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> MySQL Sortowanie
fander
post 4.08.2010, 09:01:17
Post #1





Grupa: Zarejestrowani
Postów: 231
Pomógł: 22
Dołączył: 6.10.2008

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


Witam

Mam pewien pytanko mianowicie posiadam tabelę z danymi jej struktura wygląda następująco

Kod
tabelka(
  id INTEGER,
  nazwa VARCHAR(200),
  poziom INTEGER NOT NULL,
  poziomnr INTEGER  NULL,
);


dane w tabelce wyglądają następująco
Kod
id | nazwa   | poziom | poziomnr
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
1 | a           | 3          | 3          
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
2 | b           | 3          | 1          
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
3 | a           | 3          | 2          
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
4 | b           | 2          | null          
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
5 | a           | 2          | 1          
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
6 | b           | 3          | 3          
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
7 | a           | 2          | 4          
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
8 | b           | 1          | null          
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
9 | a           | 2          | 2          
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
10 | b         | 1          | null          
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
11 | a         | 1          | 2          
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
12 | b         | 1          | null          
.
.
.
.
itd


zapytanie pobierające dane wygląda następująco

SELECT * FROM tabelka ORDER BY poziom DESC, poziomnr ASC

No i tu mam problem bo poziomnr posiada pola z wartością null, czyli najpierw wyświetlają mi się rekordy z null a następnie zachodzi sortowanie po liczbach.
Czy istnieje jakiś sposób aby pobrać w 1 zapytaniu elementy posortowane tak jak się należy.

Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post 4.08.2010, 09:12:09
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A jakie to wg. ciebie jest sortowanie jak się nalezy? Null na koncu? Bo dla mnie akurat tak jak masz teraz (null na początku) jest ok winksmiley.jpg

No ale masz:
http://nospor.pl/mysql-faq.html#faq-5


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wookieb
post 4.08.2010, 09:12:25
Post #3





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Rozumiem, że te z null chcesz mieć na końcu czy w ogóle ich nie wyświetlać? Ponieważ praktycznie wartości z null są sortowane prawidłowo.
Jeżeli chcesz mieć na końcu mozesz zrobić coś takiego
  1. SELECT * FROM tabelka ORDER BY poziom DESC, IF(poziomnr IS NULL, 100000, poziomnr) ASC

Jednakże nie będzie to zbyt wydajne przy dużych tabelach (sortowanie nie będzie wykorzystywało indeksu). Fajnie by było gdybyś opisał, co ta tabela ma przechowywać i co dokładnie chcesz przez to osiągnąć.

Ten post edytował wookieb 4.08.2010, 09:13:39


--------------------
Go to the top of the page
+Quote Post
fander
post 4.08.2010, 11:52:20
Post #4





Grupa: Zarejestrowani
Postów: 231
Pomógł: 22
Dołączył: 6.10.2008

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


Witam

Dziękuje wookieb, właśnie o to mi chodziło.
A do czego to potrzebuje? No to mam sobie bazę obiektów która zawiera różne pola, między innymi poziom. Obiekty wyświetlane są z orderem po poziomie oraz id. Poziom określa miejsce w którym będzie się wyświetlały obiekty na liście, jeśli np nowy obiekt ma poziom 3 a został dodany po obiektach z poziomem 2 to ma być wyżej na liście. (poziomnr) ma za zadanie dodatkowo określać kolejność wyświetlania się obiektów w danym poziomie, czyli:
najpierw obiekty z poziomem 3 gdzie najpierw obiekt z poziomnr 1 nastepnie poziomnr 2 etc...
następnie obiekty z poziomem nr 2 gdzie ..... etc
Problem tkwił w tym że tabelka już istniała i musiałem dodać kolumnę z poziomnr.
Pozdrawiam

Ten post edytował fander 4.08.2010, 11:57:55
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: 14.08.2025 - 10:59