我正在为一位销售女士内衣的客户制作电子商务网站。我已经为他们编写了一个胸罩尺码选择器,但今天他们回来告诉我有一个小问题。
在胸罩尺码中,AA比A小,因此它应该在图表中出现在A之前,但是当我使用MySQL按尺码排序时,它显然会先放A,然后是AA,然后是B等等。
是否有一种简单的方法可以让MySQL首先按AA,然后是A、B等等排序?
我正在为一位销售女士内衣的客户制作电子商务网站。我已经为他们编写了一个胸罩尺码选择器,但今天他们回来告诉我有一个小问题。
在胸罩尺码中,AA比A小,因此它应该在图表中出现在A之前,但是当我使用MySQL按尺码排序时,它显然会先放A,然后是AA,然后是B等等。
是否有一种简单的方法可以让MySQL首先按AA,然后是A、B等等排序?
我建议在你的表中添加另一列"orderid"(INTEGER或TINYINT),并以该列为排序依据。
SELECT *
FROM bra
ORDER BY
LENGTH(size) DESC, size
但更好的解决方案是创建一个转换表,其中包括所有可能的尺寸(欧洲、日本等),包括可用于订购的公制尺寸。
您可以使用它来构建转换图表,并以个人喜欢的系统显示尺寸。
Table bra_order
id integer auto_increment not null
bra_size char(3)
sort_id integer not null
然后做类似这样的事情:
SELECT i.* FROM inventory
LEFT JOIN bra_order b ON (b.bra_size = i.bra_size)
ORDER BY b.sort_id
在“A”前面加下划线“_A”会起作用并且被接受吗?你可以为了显示目的而去掉它吗?(不确定这是否有效)
或者,可以为排序设置一个与罩杯尺码字段分开的排序代码。
这将是您的选择:
select id, val
from test
order by
case val
when 'AA' then 1
when 'A' then 2
when 'B' then 3
END
首先按照 AA 排序,然后是 A,最后是 B :)
我更倾向于引入一个名为sequenceNo
的列来存储服务器上的顺序。想象一下其他的拣选器
size_in_number
或者size_in_cm
,然后使用类似order by size_in_number
的查询呢?这样可以根据提供的尺寸大小来排序,越小的尺寸对应越小的数字。 - Nishant