Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlanie rekordów w nietypowej kolejności
Forum PHP.pl > Forum > Bazy danych > MySQL
Juniore_TD
Witam.

Nie potrafię od jakiegoś czasu poradzić sobie z problemem wyświetlania rekordów.
Pozwólcie, że wytłumaczę.

W tabeli mam 3 kolumny:"nazwa", "najmniejsza liczba" i "reszta liczb"
Wyświetlam rekordy porządkując od najmniejszej wartości kolumny "najmniejsza liczba".
W wypadku gdy "majmniejsze liczby" są takie same porządkuję ponownie od najmniejszej liczby z kolumny "reszta liczb".
Problem polega na tym, "reszta liczb" nie musi mieć nic wpisane.

Co za tym idzie w wypadku gdy mam 4 liczby 10 w "najmniejszej liczbie" ale tylko 2 z nich mają "resztę liczb" np. 11 i 12 wtedy moja tabela wygląda tak:

10 -
10 -
10 11
10 12

Potrzebuję by rekordy bez "reszta liczb" lądowały za tymi które mają wpis, lecz dalej chcę by sortowane były od najmniejszej do największej.

Z góry dziękuję za pomoc
melkorm
  1. ORDER BY IF (liczba IS NULL OR liczba='', 0, -1*liczba) ASC
Juniore_TD
dzięki za szybką odpowiedź...

kod ten powoduje:

10 12
10 11
10 -
10 -

czyli tak jak DESC, ja potrzebuję:

10 11
10 12
10 -
10 -
melkorm
  1. SELECT * FROM `test` ORDER BY IF (liczba_nastepna IS NULL OR liczba_nastepna='', 0, -1*liczba_nastepna) ASC;


Wynik:

Kod
nazwa                liczba     liczba_nastepna <BR>  <BR>  abrakadabra    10             1<BR>  druga nazwa    10             0



faktycznie, zaraz poprawię mój błąd winksmiley.jpg

poprawka:
  1. ORDER BY IF( liczba_nastepna = '', 1, 0.1 * liczba_nastepna ) ASC

Narazie lepszy pomysł mi nie przychodzi do głowy sad.gif Ajj przeciez to nei zadziałą dla większych liczba biggrin.gif Ale ja dziś daję rady hu. hu, sorka za to ;p
Juniore_TD
kurcze... teraz znowu działa jak zwykle sortowanie od najmniejszej.
Pozwól, że wkleję dokładnie mój kod.

  1. SELECT * FROM gracz WHERE `liga` = $l ORDER BY `najszybsze` ASC, IF ( szybkie = '', 1, 0.1 * szybkie ) ASC
melkorm
  1. ORDER BY IF( liczba_nastepna = '', 1, CAST( CONCAT( 0.1, liczba_nastepna ) AS UNSIGNED ) ) ASC


Lub to co misie lubią najbardziej czyli proteza:

  1. ORDER BY IF (liczba IS NULL OR liczba='', 99999999999, liczba) ASC


Za 9'wiatki wartość której ta liczba napewno nie osiągnie tongue.gif

Pierwszy sposób jest troche hmm niewydajny, konkatenacja i rzutowanie winksmiley.jpg

Sam wybierz.
Juniore_TD
A więc...

sposób pierwszy owszem umiejscawia puste na końcu, lecz wpisane sortuje w przedziwny sposób - kompletnie je miesza.

sposób 2 działa jak ta lala - dzięki za dogłębne przefiltrowanie problemu - pozdrawiam smile.gif
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.