goma smile Posted July 25, 2014 Report Share Posted July 25, 2014 Labdien iedomājieties ir vienā laukā zem tipa varchar tiek glabāti krāsu nosaukumi:ZaļapelēkamelnaucUn 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... ? Quote Link to comment Share on other sites More sharing options...
zeCode Posted July 25, 2014 Report Share Posted July 25, 2014 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 Quote Link to comment Share on other sites More sharing options...
jurchiks Posted July 25, 2014 Report Share Posted July 25, 2014 Vai es pareizi saprotu, ka tev vienā un tajā pašā db kolonnā glabājas gan krāsa, gan izmērs? Jo ja tā, tad tā pati par sevi ir būtiska problēma. Quote Link to comment Share on other sites More sharing options...
goma smile Posted July 25, 2014 Author Report Share Posted July 25, 2014 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... Quote Link to comment Share on other sites More sharing options...
Kasspars Posted July 25, 2014 Report Share Posted July 25, 2014 Tev nav variantu kā tikai skaitļiem taisīt INT kolonnu un kārtot pēc tās Ciparus kārtojot kā stringus iegūsi nepareizu secību Quote Link to comment Share on other sites More sharing options...
goma smile Posted July 25, 2014 Author Report Share Posted July 25, 2014 a nevar orderēt pēc teksta, bet ja pirmais "simbols" ir skaitlis tad pēc skaitļa... ? Quote Link to comment Share on other sites More sharing options...
jurchiks Posted July 25, 2014 Report Share Posted July 25, 2014 Nu a ko tad, ja tev tur ir "10mm", "100mm" un pēc tam "10kg"? Neder tāda kārtošana. Nafig tas viss ir vienā kolonnā? Quote Link to comment Share on other sites More sharing options...
codez Posted July 25, 2014 Report Share Posted July 25, 2014 (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 July 25, 2014 by codez Quote Link to comment Share on other sites More sharing options...
Kasspars Posted July 25, 2014 Report Share Posted July 25, 2014 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 0pelēka 0melna 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ā Quote Link to comment Share on other sites More sharing options...
jurchiks Posted July 25, 2014 Report Share Posted July 25, 2014 >Tādā veidā tev nevajadzēs veikt nekādas izmaiņas esošajā sistēmā. Vai tu domā, ka esošajā sistēmā neko nevajag mainīt? Quote Link to comment Share on other sites More sharing options...
Pieduriens Posted July 26, 2014 Report Share Posted July 26, 2014 Varbūt viņs izmanto kādu agrīnu EAV struktūru? :) Quote Link to comment Share on other sites More sharing options...
jurchiks Posted July 28, 2014 Report Share Posted July 28, 2014 Varbūt viņs izmanto kādu agrīnu EAV struktūru? :) Trūkst attribute name. Quote Link to comment Share on other sites More sharing options...
goma smile Posted July 30, 2014 Author Report Share Posted July 30, 2014 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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.