Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: order by
Forum PHP.pl > Forum > Bazy danych > MySQL
mihmih
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
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
A czy w tym przypadku 4x1000 (4000) ma być większe niż 3x2000 (6000) czy mniejsze (według mnożnej czy iloczynu)?
Pyton_000
ORDER BY SUBSTRING_INDEX(kolumna, 'x', 1)+0 ASC
ORDER BY kolumna+0 ASC

i inne wariacje których nie sprecyzowałeś.
mihmih
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
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.
mihmih
dzięki za pomoc, mógłbym prosić o wyjaśnienie co oznacza/robi linijka kodu:

ORDER BY kolumna+0 ASC

?
Crozin
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
ponieważ niektóre artykuły to słowa, dlatego tak muszę kombinować.
Crozin
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.