Mysql 如何排序此查询

Mysql 如何排序此查询,mysql,sql,Mysql,Sql,我有一个从mysql数据库中获取产品的查询。是这样的: SELECT p.name, p.description, p.price, ps.sizename FROM products p JOIN product_sizes ps ON ps.id = p.size_id 该查询获取的sizename可以是S、M、L等,也可以是38、39、40等 我现在想要的是,对于这个查询,是按sizename排序,但排序的方式是,当大小是数字时,它排序是数字的,但当它像s,M,L时,它以正确的方式排序

我有一个从mysql数据库中获取产品的查询。是这样的:

SELECT p.name, p.description, p.price, ps.sizename 
FROM products p
JOIN product_sizes ps ON ps.id = p.size_id
该查询获取的sizename可以是S、M、L等,也可以是38、39、40等

我现在想要的是,对于这个查询,是按sizename排序,但排序的方式是,当大小是数字时,它排序是数字的,但当它像s,M,L时,它以正确的方式排序,所以s,M,L,XL,XXL,而不是字母顺序的L,M,s,XL,XXL


如何做到这一点?

您可以使用
CASE
语句来实现,但我建议您在尺寸表中添加
排序器
列,并按此进行排序

order by case when ps.sizename in (38,39,40)
              then ps.sizename
              when ps.sizename = 'XS'
              then 1
              when ps.sizename = 'S'
              then 2
              when ps.sizename = 'M'
              then 3
              when ps.sizename = 'L'
              then 4
              when ps.sizename = 'XL'
              then 5
              when ps.sizename = 'XXL'
              then 6
         end
您可以根据需要调整字母数字顺序的数字

试试看

   ORDER BY 
        CASE    WHEN sizename='S'    THEN 38 
                WHEN sizename='M'    THEN 39
                WHEN sizename='L'    THEN 40
                WHEN sizename='XL'   THEN 42
                WHEN sizename='XXL'  THEN 44
                WHEN sizename REGEXP ('[0-9]') THEN sizename
        END

尝试按所需顺序指定现有值,类似于:

SELECT p.name, p.description, p.price, ps.sizename 
FROM products p
JOIN product_sizes ps ON ps.id = p.size_id
ORDER BY FIELD(ps.sizename,'S','M','L','XL','XXL',...)
这应该起作用:

SELECT p.name, p.description, p.price, ps.sizename 
FROM products p
JOIN product_sizes ps ON ps.id = p.size_id
order by case when CONVERT(sizename, SIGNED INTEGER) IS NOT NULL 
    THEN CONVERT(sizename, SIGNED INTEGER) 
    ELSE -CAST(-1 AS UNSIGNED) END ASC
, case sizename WHEN 'S' THEN 1 
            WHEN 'M' THEN 2
            WHEN 'L' THEN 3
            WHEN 'XL' THEN 4
            WHEN 'XXL' THEN 5 END ASC
, sizename ASC

这里有一把小提琴:

好的,这看起来很有希望。我一回家就要测试一下。