Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Posortowanie wyników według miesięcy Jan, Feb itd.
miedzna
post
Post #1





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Witajcie, w tabeli mam kolumnę zawierającą miesiące, skróty angielskie: Jan, Feb, Mar, Apr itd. jak posortować dane z bazy według tych miesięcy, żeby się ułożyło ładnie od stycznia po grudzień?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
sebekzosw
post
Post #2





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


Sprawdź to:
  1. SELECT * FROM tabela ORDER BY kolumna_zawierajaca_miesiace ASC
Go to the top of the page
+Quote Post
acztery
post
Post #3





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

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


SELECT *, DATE_FORMAT(data, '%b') AS data FROM newsy ORDER BY data DESC;

pisane z palca moze coś wyjdzie jak nie %b to moze %f

więcej tu

http://dev.mysql.com/doc/refman/5.0/en/dat...-functions.html

@sebekzosw Tak nie po to posrtuje alfabetycznie i wyjdzie na 1 pozycji april

Ten post edytował acztery 3.07.2008, 08:53:22
Go to the top of the page
+Quote Post
miedzna
post
Post #4





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Cytat(sebekzosw @ 3.07.2008, 09:49:15 ) *
Sprawdź to:
  1. SELECT * FROM tabela ORDER BY kolumna_zawierajaca_miesiace ASC


Nie, tak nie może być, bo posortowało mi: Apr, Aug, Dec, Feb itd. czyli alfabetycznie, a ja chcę, od stycznia Jan po grudzień Dec smile.gif

Ten post edytował miedzna 3.07.2008, 08:54:31
Go to the top of the page
+Quote Post
nospor
post
Post #5





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




po pierwsze: jesli masz sposobnosc, to zmien to na daty jak manual przykazal
po drugie: jak nie mozesz to: http://nospor.pl/mysql-faq-n25.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
miedzna
post
Post #6





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Cytat(acztery @ 3.07.2008, 09:51:55 ) *
SELECT *, DATE_FORMAT(data, '%b') AS data FROM newsy ORDER BY data DESC;

pisane z palca moze coś wyjdzie jak nie %b to moze %f

więcej tu

http://dev.mysql.com/doc/refman/5.0/en/dat...-functions.html

@sebekzosw Tak nie po to posrtuje alfabetycznie i wyjdzie na 1 pozycji april



Zrobiłem jak mówisz. zapytanie wygląda tak:
SELECT *, DATE_FORMAT(miesiac, '%b') AS sortowanie FROM tabela ORDER BY sortowanie ASC

i posortowało mi: Jan, Dec, Nov, Oct, Sep, Aug, itd. może problem tkwi w tym, że pole w którym trzymam miesiące jest polem Char o długości 3?
Go to the top of the page
+Quote Post
acztery
post
Post #7





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

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


a nie mozesz zienic z Jan np na 1 i tak do 12, moze to być powod. A daj %f. Chodz i tak wątpie ze zadziała jak w bazie masz tylko skróty... Musisz to zrobić ręcznie aby działało w 100% sprawnie.
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




@miedzna w moim poprzednim poscie dostales odpowiedź. Cos z nią nie tak czy jak?

date_format sluzy do zmiany daty na format jaki chcesz, a nie zmiany skrótu na datę.

Masz strukture do 4 liter to teraz musisz kombinowac. W moim poprzednim poscie dostales odpowiedź jak masz kombinować.


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

"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
miedzna
post
Post #9





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Cytat(nospor @ 3.07.2008, 10:26:52 ) *
@miedzna w moim poprzednim poscie dostales odpowiedź. Cos z nią nie tak czy jak?

date_format sluzy do zmiany daty na format jaki chcesz, a nie zmiany skrótu na datę.

Masz strukture do 4 liter to teraz musisz kombinowac. W moim poprzednim poscie dostales odpowiedź jak masz kombinować.



Kombinowałem i nic mi nie wychodzi, nie wiem jak to posortować, jak daję zapytanie:

SELECT *, DATE_FORMAT(miesiac, '%b') AS sortowanie FROM tabela ORDER BY sortowanie ASC
to zmienna sortowanie jest NULL sad.gif

Cytat(acztery @ 3.07.2008, 10:04:38 ) *
a nie mozesz zienic z Jan np na 1 i tak do 12, moze to być powod. A daj %f. Chodz i tak wątpie ze zadziała jak w bazie masz tylko skróty... Musisz to zrobić ręcznie aby działało w 100% sprawnie.


Nie bardzo, bo dane te wysyłam do XMLa a nie chcę w locie zamieniać je na skrócone nazwy, wolę od razu w bazie trzymać jako nazwy. Chyba że znaz, jak szybko w locie zamienić cyferki na skrócone nazwy, poprzez tabeli i str_replace?
Go to the top of the page
+Quote Post
nospor
post
Post #10





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




Cytat
Kombinowałem i nic mi nie wychodzi, nie wiem jak to posortować, jak daję zapytanie:

SELECT *, DATE_FORMAT(miesiac, '%b') AS sortowanie FROM tabela ORDER BY sortowanie ASC
to zmienna sortowanie jest NULL
Czytaj ze zrozumieniem! Pisalem ci przeciez ze date_format tu sie nie przyda.
W moim pierwszym poscie w tym temacie podalem ci co masz zrobic

edit:
Cytat
Nie bardzo, bo dane te wysyłam do XMLa a nie chcę w locie zamieniać je na skrócone nazwy, wolę od razu w bazie trzymać jako nazwy
No nie tedy droga. W bazie masz trzymac tak informacje, by latwo sie na nic operowalo. Zamiana cyferek na skrót miesiaca w locie to przeciez banał.


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

"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
miedzna
post
Post #11





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


@nospor

Zrobiłem jak piszesz:

SELECT *, CASE miesiac
WHEN Jan THEN 1
WHEN Feb THEN 2
WHEN Mar THEN 3
WHEN Apr THEN 4
WHEN May THEN 5
WHEN Jun THEN 6
WHEN Jul THEN 7
WHEN Aug THEN 8
WHEN Sep THEN 9
WHEN Oct THEN 10
WHEN Nov THEN 11
WHEN Dec THEN 12
ELSE NULL
END as sortowanie
FROM tabela
ORDER BY sortowanie

i dostałem

MySQL zwrócił komunikat:
#1064 - Something is wrong in your syntax obok 'Dec THEN 12 ELSE NULL END as sortowanie FROM tabela ORDER BY sortowanie
LI' w linii 1


zrobiłem drugą metodą:

SELECT * FROM tabela
ORDER BY Jan=1 desc, Feb=2 desc, Mar=3 desc, Apr=4 desc, May=5 desc, Jun=6 desc, Jul=7 desc, Aug=8 desc, Sep=9 desc, Oct=10 desc, Nov=11 desc, Dec=12 desc

to samo:

MySQL zwrócił komunikat:

#1064 - Something is wrong in your syntax obok 'Dec = 12 desc
LIMIT 0, 30' w linii 1
Go to the top of the page
+Quote Post
nospor
post
Post #12





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




Ale Jan, Feb,.... to są teksty. Teksty nalezy brac w apostrofy
'Jan', 'Feb'

Ja wiem ze na stronie dalem bez apostrofów, ale tam były liczby. No odrobina zastanowienia się a nie kopiowanie zywcem tez czasem jest potrzebne.

edit: pozatym drugiego sposobu to nie zalapales zupelnie winksmiley.jpg
  1. SELECT * FROM tabela ORDER BY pole='Jan' DESC, pole='Feb' ....


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

"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
miedzna
post
Post #13





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Cytat(nospor @ 3.07.2008, 11:40:06 ) *
Ale Jan, Feb,.... to są teksty. Teksty nalezy brac w apostrofy
'Jan', 'Feb'

Ja wiem ze na stronie dalem bez apostrofów, ale tam były liczby. No odrobina zastanowienia się a nie kopiowanie zywcem tez czasem jest potrzebne.

edit: pozatym drugiego sposobu to nie zalapales zupelnie winksmiley.jpg
  1. SELECT * FROM tabela ORDER BY pole='Jan' DESC, pole='Feb' ....



No tak, teraz jest OK smile.gif

Dzięki nospor!
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 Aktualny czas: 19.08.2025 - 06:24