Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyświetlanie rekordów w nietypowej kolejności
Juniore_TD
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.07.2009

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


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





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


  1. ORDER BY IF (liczba IS NULL OR liczba='', 0, -1*liczba) ASC
Go to the top of the page
+Quote Post
Juniore_TD
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.07.2009

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


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 -

Ten post edytował Juniore_TD 14.07.2009, 20:38:47
Go to the top of the page
+Quote Post
melkorm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


  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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

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

Narazie lepszy pomysł mi nie przychodzi do głowy (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Ajj przeciez to nei zadziałą dla większych liczba (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Ale ja dziś daję rady hu. hu, sorka za to ;p

Ten post edytował melkorm 14.07.2009, 20:50:33
Go to the top of the page
+Quote Post
Juniore_TD
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.07.2009

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


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





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


  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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Pierwszy sposób jest troche hmm niewydajny, konkatenacja i rzutowanie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Sam wybierz.
Go to the top of the page
+Quote Post
Juniore_TD
post
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.07.2009

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Juniore_TD 14.07.2009, 21:09:42
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.09.2025 - 21:41