Figured I'd chime in with something I spent entirely way too much time on (probably). A JavaScript class to normalize and sort LC call numbers https://github.com/rayvoelker/js-loc-callnumbers Not sure if that helps you in your particular situation, but it might give you a place to start along with the other suggestions given! Good luck! --Ray On Oct 25, 2017 5:16 PM, "Craig Dietrich" <[log in to unmask]> wrote: > If you're using PHP you could use natsort() on the result, > > http://php.net/manual/en/function.natsort.php > > Alternatively, you could try ordering by the length of the VARCHAR field > first, > > ORDER BY LENGTH(field), field > > Sent from mobile > > > On Oct 25, 2017, at 2:11 PM, Jodie Gambill <[log in to unmask]> > wrote: > > > > Hi Will - > > I had a similar task a few years ago on a small project, though we only > > used the classMark and classNum (from your example) parts of the call > > number for what we needed. I implemented it as you outlined above, with > two > > separate fields to enable proper sorting -- classMark as varchar and > > classNum as float. I look forward to hearing if anyone else has done it > > more efficiently! > > -Jodie > > > >> On Wed, Oct 25, 2017 at 3:55 PM, Will Martin <[log in to unmask]> > wrote: > >> > >> We have a small web app with a MySQL backend, containing lists of books > >> that have been reported lost and tracking our efforts at locating them. > >> Access Services requested that the list of currently missing books be > >> sorted according to LC call number. So we did, but the results are > ordered > >> in that uniquely digital "1000 comes before 2" way. For example, human > >> logic would sort these seven call numbers like so: > >> > >> HM132 .A343 > >> HM251 .M2 1960 > >> HM278 .S37 1990 > >> HM281 .C6713 1985 > >> HM281 .H6 1958 > >> HM1126 .F56 2011 > >> HM1261 .K64 1978 > >> > >> But MySQL sorts them like so: > >> > >> HM1126 .F56 2011 > >> HM1261 .K64 1978 > >> HM132 .A343 > >> HM251 .M2 1960 > >> HM278 .S37 1990 > >> HM281 .C6713 1985 > >> HM281 .H6 1958 > >> > >> Currently, these are stored in a VARCHAR column in the MySQL table. The > >> research that I've done suggests that there is no way just sort that > column > >> using ORDER BY, and that we'll have to split out the call number into > >> separate columns for its component parts: > >> > >> HM = classMark > >> 251 = classNum > >> .M2 = cutter > >> 1960 = pubYear > >> > >> ... and then do something like "ORDER BY classMark, classNum, cutter, > >> pubYear". > >> > >> This database is unlikely to grow beyond a few hundred active records at > >> most, so I'm not too concerned about the computational overhead of doing > >> all that sorting. But it's going to be a fair bit of work to modify the > >> table definition and then rejigger all the associated SQL queries in the > >> app. > >> > >> Does anyone have a better solution for sorting LC call numbers in MySQL > >> results? > >> > >> Thanks. > >> > >> Will Martin > >> > >> Head of Digital Initiatives, Systems & Services > >> Chester Fritz Library > >> University of North Dakota > >> >