使用混合数据类型的mysql自定义顺序

时间:2012-11-19 13:23:45

标签: mysql sql-order-by

在下面的mysql查询中,我使用自定义顺序语句,因此我可以按特定顺序显示各种大小,而不是按字母顺序显示:

select distinct size 
from product p left join productsizes ps 
             on p.productcode = ps.size_prodcode 
order by field(size, 'XXS', 'XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL')

如果某些产品也有数字尺寸,我该如何编写订单,以便将数字尺寸与自定义订单一起按升序排列?

所需输出的示例:

  

30,32,34,S,M,L

  

S,M,L,30,32,34

3 个答案:

答案 0 :(得分:4)

找不到搜索字符串时,

FIELD()会返回0。因此:

ORDER BY FIELD(size, 'XXS', 'XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL'), size

答案 1 :(得分:2)

尝试

ORDER BY (CASE WHEN sizes REGEXP '(\d)+' THEN 0 ELSE 1 END) ASC,
         field(sizes, 'XXS', 'XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL')

答案 2 :(得分:0)

您应该尝试使用包含所有尺寸的枚举字段。它将保持其排序顺序。

CREATE TABLE ... (
  ...
  size ENUM ('30', '32', '34', 'S', 'M', 'L')
  ...
);

或者

CREATE TABLE ... (
  ...
  size ENUM ('S', 'M', 'L', '30', '32', '34')
  ...
);