goma smile Posted July 25, 2014 Report 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
zeCode Posted July 25, 2014 Report 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
jurchiks Posted July 25, 2014 Report 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
goma smile Posted July 25, 2014 Author Report 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
Kasspars Posted July 25, 2014 Report 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
goma smile Posted July 25, 2014 Author Report Posted July 25, 2014 a nevar orderēt pēc teksta, bet ja pirmais "simbols" ir skaitlis tad pēc skaitļa... ? Quote
jurchiks Posted July 25, 2014 Report 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
codez Posted July 25, 2014 Report 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
Kasspars Posted July 25, 2014 Report 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
jurchiks Posted July 25, 2014 Report 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
Pieduriens Posted July 26, 2014 Report Posted July 26, 2014 Varbūt viņs izmanto kādu agrīnu EAV struktūru? :) Quote
jurchiks Posted July 28, 2014 Report Posted July 28, 2014 Varbūt viņs izmanto kādu agrīnu EAV struktūru? :) Trūkst attribute name. Quote
goma smile Posted July 30, 2014 Author Report 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
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.