• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sortowanie tabeli wyrażeniami regularnymi

Object Storage Arubacloud
0 głosów
106 wizyt
pytanie zadane 18 lutego 2017 w SQL, bazy danych przez mordimer Mądrala (5,720 p.)
edycja 18 lutego 2017 przez mordimer
Witam mam taką tabelę :

id | text

1 111/Aa

2 111/Sa

3 111/1

4 111/2

5 1111/3

6 1111/bbbbbbbb

Jak posortować to

żeby zwrócić rekordy w takiej kolejności (tzn pierwsze rekordy z literami od a do z po / a potem liczby rosnaco):

111/Aa

1111/bbbbbbbb

111/Sa

111/1

111/2

1111/3

Próbowałem coś takiego:

SELECT * from tabela ORDER BY IF(text RLIKE '[a-z] ', 1, 2 ) , text ASC;

ale zwraca coś takiego ;/

111/1
111/2
111/3
111/AB
111/bbbbbbbb
111/Sa

Ma ktoś jakiś pomysł jak to zrobić wyrażeniem regularnym lub może w inny sposób ?

1 odpowiedź

0 głosów
odpowiedź 19 lutego 2017 przez mordimer Mądrala (5,720 p.)

Witam ponownie nie będe zakładać nowego tematu bo w sumie chodzi mi o rozwiniecie tego wątku ... ogólnie ogarnąłem prawie temat przy użyciu takiego takiego zapytania:

SELECT * from tabela order by
CASE when (substring_index(text, '/', -1) rlike '^[0-9]+') THEN substring_index(text, '/', -1) END ASC,
substring_index(text, '/', -1) + 0,text

 

Id text
5 111/ab
1 111/cdfg
4 111/st
2 qwer
11 111/0
9 111/1
8 111/1-KSS
6 111/2
12 111/5
3 111/67

 Wszystko sortuje się w założony sposób tylko potrzebuję dodać do tego jeszcze jeden "wyjątek"... mianowice po dodaniu rekordów:

"111/0/A"

"111/0/b"

całość sortuję się w ten sposób:

Id text
10 111/0/A
7 111/0/b
5 111/ab
1 111/cdfg
4 111/st
2 qwer
11 111/0
9 111/1
8 111/1-KSS
6 111/2
12 111/5
3 111/67

moje pytanie brzmi dlaczego

Id text
10 111/0/A
7 111/0/b

 te rekordy są pierwsze ?

i jak zrobić żeby całość sortowała się w założony na początku sposób:

Id     text

5     111/ab
1     111/cdfg
4     111/st
2     qwer
11     111/0
10     111/0/A
7     111/0/b
9     111/1
8     111/1-KSS
6     111/2
12     111/5
3     111/67

 

czyli pierwsze litery po "/" potem liczby ... w tym miejscu: http://sqlfiddle.com/#!9/3df258/1 jest działający przykład ... dziękuje za wszystkie sugestie pozdrawiam :]

Podobne pytania

0 głosów
1 odpowiedź 541 wizyt
0 głosów
1 odpowiedź 248 wizyt
pytanie zadane 8 września 2017 w SQL, bazy danych przez Ardzej16 Początkujący (450 p.)
0 głosów
2 odpowiedzi 163 wizyt
pytanie zadane 28 czerwca 2017 w PHP przez Marchiew Dyskutant (7,690 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...