我在 MySQL 表中有数据,title
如下所示:
16A Activated Charcoal
16AA Lidocaine Viscous Gel (Xylocaine ®)
16B Adenosine ( Adenocard)
16BB Lorazepam (Ativan)
16C Albuterol (Proventil, Ventolin)
16CC Magnesium Sulfate
16D Amidarone Cordarone, Nexterone
16E Aspirin
16F Atropine Sulfate
16G Calcium Chloride
[...]
16Z DuoDote Auto-Injector
我的应用程序使用此 SQL 查询来构建数据列表:
SELECT uid, file, title
FROM library
WHERE section = '$uid' AND enabled >0
ORDER BY title ASC
这是可行的,除了 MySQL(正确地)将 16AA 紧跟在 16A(如上所列)之后。我想要的是列出所有 16A-16Z,然后是 16AA-16ZZ。因此按此顺序返回数据:
16A Activated Charcoal
16B Adenosine ( Adenocard)
16C Albuterol (Proventil, Ventolin)
[...]
16Z DuoDote Auto-Injector
16AA Lidocaine Viscous Gel (Xylocaine ®)
16BB Lorazepam (Ativan)
16CC Magnesium Sulfate
如果不向我的表中添加 sort
列,是否可以通过某种方式编写查询来对这些 A-Z、AA-ZZ 等进行排序?
我的想法:如果我计算空格在 title
中出现的位置,我可以按那个数字 ASC 排序,然后按第二优先级的标题 ASC 排序。这应该首先按字母顺序给出所有 3 位代码,然后按字母顺序给出所有 4 位代码,然后按字母顺序给出所有 5 位代码,对吗?
最佳答案
好吧,哎呀,我想我只是需要谈谈这个。解决方案很简单,使用 MySQL LOCATE()
找到空间,从而推断出代码的长度:
SELECT uid, file, title,
LOCATE(' ', title) AS code_length
FROM library
WHERE section = '{$row['uid']}' AND enabled >0
ORDER BY code_length ASC, title ASC
关于MySQL 查询按字母顺序 A-Z 但 "AA"之后是 "Z",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189764/