Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Posortowanie wyników według miesięcy Jan, Feb itd.
Forum PHP.pl > Forum > Bazy danych
miedzna
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ń?
sebekzosw
Sprawdź to:
  1. SELECT * FROM tabela ORDER BY kolumna_zawierajaca_miesiace ASC
acztery
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
miedzna
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
nospor
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
miedzna
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?
acztery
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.
nospor
@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ć.
miedzna
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?
nospor
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ł.
miedzna
@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
nospor
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' ....
miedzna
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!
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.