Jump to content
php.lv forumi

Recommended Posts

Posted

Labdien iedomājieties ir vienā laukā zem tipa varchar tiek glabāti krāsu nosaukumi:

Zaļa
pelēka
melna
uc

Un visādi izmēri

22mm

23mm

1000mm

 

zem vienas tabulas lauciņa vai var viņus ORDERĒT pēc alfabēta un skaitļu secības...

 

?

Posted

 Protams, ja vienmēr izmanto milimetros, ja ir vēl citās vienības tas , noteikti vajadzes aizstāt visas vērtības.

SELECT *
FROM name_of_table
ORDER BY `color_column` ASC, SUBSTRING_INDEX(`size_column`, 'mm', 1) ASC
LIMIT 0 , 30
Posted

 

 Protams, ja vienmēr izmanto milimetros, ja ir vēl citās vienības tas , noteikti vajadzes aizstāt visas vērtības.

SELECT *
FROM name_of_table
ORDER BY `color_column` ASC, SUBSTRING_INDEX(`size_column`, 'mm', 1) ASC
LIMIT 0 , 30

 

ne vienmēr tie ir mm, tie var būt kg, gabali, tur ir visādas sajauktas mērvienības, klasifikātori...

Posted (edited)

Variants ir mēģināt konvertēt un, ja ir teksts, tas konvertējas par 0. Tā kā visiem tekstiem konvertācijas rezultāts ir 0, tad tie tālāk tiek kārtoti leksikogrāfiski.
Bet šeit ir problēma, ka katrs convert mēģinājums radīs warningu, ja tas nebūs skaitlis.
 

SELECT *
FROM test
ORDER BY CONVERT(val, SIGNED INTEGER) ASC, val ASC

P.S.

Netā atradu variantu, kur skaitļi tiek uzpadoti ar 0, lai kārtotos pareizi:

http://sqlfiddle.com/#!2/7973e/21

Edited by codez
Posted

Tev ir jāuzraksta mazs skripts, kurš izanalizē lauka vērtību un izdomā attiecīgo kārtošanas vērtību/skaitli. Šo skaitli noglabā jaunā laukā

Visām neskaitļa vērtībā liec 0 vai 99999999999 - atkartībā no tā vai gribi neskaitļa vērtībās pirmās vai pēdējās

 

 

[esosais_lauks]       [jaunais_lauks]

Zaļa                         0
pelēka                     0
melna                      0

22mm                      22

23mm                      23

1000mm                  1000

2kg                          2000

 

 

Kārtošanu taisi šādi

ORDER BY jaunais_lauks ASC, esosais_lauks ASC

 

Skriptu liec CRONā un palaid reizi stundā. Tādā veidā tev nevajadzēs veikt nekādas izmaiņas esošajā sistēmā

Posted

Variants ir mēģināt konvertēt un, ja ir teksts, tas konvertējas par 0. Tā kā visiem tekstiem konvertācijas rezultāts ir 0, tad tie tālāk tiek kārtoti leksikogrāfiski.

Bet šeit ir problēma, ka katrs convert mēģinājums radīs warningu, ja tas nebūs skaitlis.

 

SELECT *
FROM test
ORDER BY CONVERT(val, SIGNED INTEGER) ASC, val ASC

P.S.

Netā atradu variantu, kur skaitļi tiek uzpadoti ar 0, lai kārtotos pareizi:

http://sqlfiddle.com/#!2/7973e/21

 

Cepums paldies

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...