5

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

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

4

3 回答 3

4

FIELD()0未找到搜索字符串时返回。所以:

ORDER BY FIELD(size, 'XXS', 'XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL'), size
于 2012-11-19T13:27:24.740 回答
2

尝试

ORDER BY (CASE WHEN sizes REGEXP '(\d)+' THEN 0 ELSE 1 END) ASC,
         field(sizes, 'XXS', 'XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL')
于 2012-11-19T13:28:50.830 回答
0

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

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

或者

CREATE TABLE ... (
  ...
  size ENUM ('S', 'M', 'L', '30', '32', '34')
  ...
);
于 2012-11-19T13:29:10.380 回答