Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] sortowanie
misiek172
post
Post #1





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

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


Witam.

Mam nastepujący kłopot:

mam baze danych w której jedna z kolumn nazywa się nr i wygląda np tak: 28/2007

chodzi mi o to aby posrotwać numery w kolejności malejącej, czyli jak mam takie numery:

19/2007
21/2007
26/2007
27/2007
25/2007
24/2007
23/2007
28/2007
325/06
20/2007
29/2007

i żeby je posortowało. Problem tkwi w tym, iż trzeba uwzględnik przy sortowaniu rok (ta liczba po /) oraz nr (liczba przed /).

Jeśli chodzi o wyciągnięcie następnej liczny w kolejności to udało mi się zrobić to tym skryptem:

  1. <?php
  2. function next_nr($nr){
  3. for($i=0;$i<count($nr);$i++){
  4. $c = explode('/', $nr[$i]);
  5. $q[$i] = Array();
  6. $q[$i][0] = $c[0];
  7. $q[$i][1] = $c[1];
  8. $w[$i] = $c[1];
  9. }
  10. $max = end($w);
  11. $v = 0;
  12. for($i=0;$i<count($q);$i++){
  13. if($q[$i][1] == $max){
  14. $tab[$v] = $q[$i][0];
  15. $v++;
  16. }
  17. }
  18. sort($tab);
  19. $war = end($tab);
  20. return ++$war.'/'.$max;
  21.  
  22. }
  23. ?>


Ale teraz musze mieć ich kolejność aby baza wyświetliła mi dane względem numerów.

Bardzo prosze o pomoc i z góry dziękuje, Łukasz.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
heaven
post
Post #2





Grupa: Nieautoryzowani
Postów: 92
Pomógł: 15
Dołączył: 21.10.2006

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


  1. SELECT * ,SUBSTRING_INDEX(nr, '/', 1) AS numerek, SUBSTRING_INDEX(nr, '/', -1) AS rok FROM testt ORDER BY rok,numerek;

posotuje wedlug roku a nastepnie wedlug numeru. jesli chcesz odwrotnie to tylko odwroc rok i numerek na koncu. jak cos to pisz. jak bede wiedzial, pomoge. pozdr

sorka powinno byc tak
  1. SELECT * ,CONVERT(SUBSTRING_INDEX(nr, '/', 1),SIGNED) AS numerek, CONVERT(SUBSTRING_INDEX(nr, '/', -1),SIGNED) AS rok FROM testt ORDER BY rok,numerek;

ech a tak naprawde jesli ma byc sortowanie malejace to powinno byc tak (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
  1. SELECT * ,CONVERT(SUBSTRING_INDEX(nr, '/', 1),SIGNED) AS numerek, CONVERT(SUBSTRING_INDEX(nr, '/', -1),SIGNED) AS rok FROM testt ORDER BY rok DESC,numerek DESC;
ciekawe ile jeszcze razy bede edytowal tego posta (IMG:http://forum.php.pl/style_emoticons/default/blink.gif)
a zeby nie tworzyc dodatkowych niepotrzebnych 2 kolumn numerek i rok to mozna to zrobic tak
  1. SELECT * FROM testt ORDER BY CONVERT(SUBSTRING_INDEX(nr, '/', -1),SIGNED) DESC,CONVERT(SUBSTRING_INDEX(nr, '/', 1),SIGNED) DESC;

jeszcze jedno, zauwazylem ze masz jeden wpis 325/06 tak wiec zeby mimo wszystko dobrze sortowalao to trzeba jeszcze inaczej to zrobic ALE warunkiem jest ze nie ma daty starszej niz 2000
  1. SELECT * FROM testt ORDER BY CONVERT(RIGHT(SUBSTRING_INDEX(nr, '/', -1),2),SIGNED) DESC,CONVERT(SUBSTRING_INDEX(nr, '/', 1),SIGNED) DESC;

a jesli ochi o zwrocenie nastepnego numeru to mozna uzyc tego juesli masz ten wpis z rokiem w postaci 2 cyfrowej 325/06
  1. SELECT CONCAT_WS('/',CONVERT(SUBSTRING_INDEX(nr, '/', 1),SIGNED)+1,CONVERT(SUBSTRING_INDEX(nr, '/', -1),SIGNED)) FROM testt ORDER BY CONVERT(RIGHT(SUBSTRING_INDEX(nr, '/', -1),2),SIGNED) DESC,CONVERT(SUBSTRING_INDEX(nr, '/', 1),SIGNED) DESC LIMIT 1;

lub tak jesli kazda data jest w postaci 4 cyfrowej (2006,2007)
  1. SELECT CONCAT_WS('/',CONVERT(SUBSTRING_INDEX(nr, '/', 1),SIGNED)+1,CONVERT(SUBSTRING_INDEX(nr, '/', -1),SIGNED)) FROM testt ORDER BY CONVERT(SUBSTRING_INDEX(nr, '/', -1),SIGNED) DESC,CONVERT(SUBSTRING_INDEX(nr, '/', 1),SIGNED) DESC LIMIT 1;

select w przypadku tych danych
19/2007
21/2007
26/2007
27/2007
25/2007
24/2007
23/2007
28/2007
325/06
20/2007
29/2007
zwroci: 30/2007

Ten post edytował heaven 28.02.2007, 14:18:09
Go to the top of the page
+Quote Post

Posty w temacie


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: 16.10.2025 - 20:28