在下面的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
答案 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')
...
);