Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MySQL Sortowanie
Forum PHP.pl > Forum > Bazy danych
fander
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
nospor
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
wookieb
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ąć.
fander
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
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.