mihmih
8.02.2016, 20:43:11
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ść?
Crozin
8.02.2016, 20:45:58
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.
trueblue
8.02.2016, 20:46:12
A czy w tym przypadku 4x1000 (4000) ma być większe niż 3x2000 (6000) czy mniejsze (według mnożnej czy iloczynu)?
Pyton_000
8.02.2016, 21:11:09
ORDER BY SUBSTRING_INDEX(kolumna, 'x', 1)+0 ASC
ORDER BY kolumna+0 ASC
i inne wariacje których nie sprecyzowałeś.
mihmih
8.02.2016, 21:16:40
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.
trueblue
8.02.2016, 21:20:18
To masz rozwiązanie od
Pyton_000, ewentualnie:
ORDER BY cast(substring_index(wartosc,'x',1) AS UNSIGNED)
a dodatkowo:
ORDER BY wartosc REGEXP '^[0-9]+x' DESC, cast....
jeśli priorytet mają wartości formatu YxZZZZ.
mihmih
8.02.2016, 21:20:51
dzięki za pomoc, mógłbym prosić o wyjaśnienie co oznacza/robi linijka kodu:
ORDER BY kolumna+0 ASC
?
Crozin
8.02.2016, 21:36:09
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?
mihmih
8.02.2016, 21:38:53
ponieważ niektóre artykuły to słowa, dlatego tak muszę kombinować.
Crozin
8.02.2016, 21:59:32
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.
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.