Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> order by
mihmih
post
Post #1





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

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


witam,

mam takim problem:

mam pole typu varchar, gdzie wpisuję różne zakupy, a część tych rekordów to np. 3x1000, 4x1000, 10x2000, 12x2000 itd. Chciałbym, aby w przypadku, gdy pierwszym znakiem jest cyfra ORDER BY porządkował mi te rekordy jakby te pola były liczbowe. Jest taka możliwość?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


I jak niby miałoby zachować się sortowanie wartośći 3x1000 oraz 10x1000? Pierwszym znakiem w obu przypadkach jest cyfra, ale nie mam pojęcia który powinien być pierwszy w kolejności i dlaczego.
Go to the top of the page
+Quote Post
trueblue
post
Post #3





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


A czy w tym przypadku 4x1000 (4000) ma być większe niż 3x2000 (6000) czy mniejsze (według mnożnej czy iloczynu)?

Ten post edytował trueblue 8.02.2016, 20:46:49


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


ORDER BY SUBSTRING_INDEX(kolumna, 'x', 1)+0 ASC
ORDER BY kolumna+0 ASC

i inne wariacje których nie sprecyzowałeś.

Ten post edytował Pyton_000 8.02.2016, 21:11:54
Go to the top of the page
+Quote Post
mihmih
post
Post #5





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

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


ten x to nie znak mnożenia. Chciałbym uzyskać taką kolejność:

3x1000
3x2000
4x1000
5x2000
6x1000
6x2000
6x4000
10x2000
12x2000
20x1000

chodzi o to że w przypadku takich artykułów liczba przez "x" jest grubością materiału i chciałbym aby 10x1500 było za 8x1500 a nie przed.
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


To masz rozwiązanie od Pyton_000, ewentualnie:
  1. ORDER BY cast(substring_index(wartosc,'x',1) AS UNSIGNED)

a dodatkowo:
  1. ORDER BY wartosc REGEXP '^[0-9]+x' DESC, cast....
jeśli priorytet mają wartości formatu YxZZZZ.

Ten post edytował trueblue 8.02.2016, 21:20:37


--------------------
Go to the top of the page
+Quote Post
mihmih
post
Post #7





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

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


dzięki za pomoc, mógłbym prosić o wyjaśnienie co oznacza/robi linijka kodu:

ORDER BY kolumna+0 ASC

?
Go to the top of the page
+Quote Post
Crozin
post
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
mógłbym prosić o wyjaśnienie co oznacza/robi linijka kodu:

ORDER BY kolumna+0 ASC

?
Rzutuje kolumnę tekstową na typ numeryczny. Przy czym raczej powinieneś tam zrobić zwykłego CAST-a dla czytelności.

Swoją drogą dlaczego najzwyczajniej w świecie nie rozbijesz tego na dwie kolumny i nie dasz później czegoś w rodzaju ...ORDER BY liczba_1 ASC, liczba_2 ASC?
Go to the top of the page
+Quote Post
mihmih
post
Post #9





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

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


ponieważ niektóre artykuły to słowa, dlatego tak muszę kombinować.
Go to the top of the page
+Quote Post
Crozin
post
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


W takim razie utwórz sobie kilka kolumn:
- określającą typ: A / B,
- określające liczbę_1 oraz liczbę_2 w przypadku wyboru typu A,
- określającą inną_wartość w przypadku wyboru typu B.
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: 20.08.2025 - 06:02