将AA排在A之前

7

我正在为一位销售女士内衣的客户制作电子商务网站。我已经为他们编写了一个胸罩尺码选择器,但今天他们回来告诉我有一个小问题。

在胸罩尺码中,AA比A小,因此它应该在图表中出现在A之前,但是当我使用MySQL按尺码排序时,它显然会先放A,然后是AA,然后是B等等。

是否有一种简单的方法可以让MySQL首先按AA,然后是A、B等等排序?


为什么不再加一列,例如 size_in_number 或者 size_in_cm,然后使用类似 order by size_in_number 的查询呢?这样可以根据提供的尺寸大小来排序,越小的尺寸对应越小的数字。 - Nishant
添加一个名为SortOrder的int类型的附加列,我通常在所有实体中都使用SortOrder字段来使用选择列表。 - Andreas
6个回答

4

我建议在你的表中添加另一列"orderid"(INTEGER或TINYINT),并以该列为排序依据。


3
假设只有一个字母A可能重复出现,您可以这样操作:
SELECT  *
FROM    bra
ORDER BY
        LENGTH(size) DESC, size

但更好的解决方案是创建一个转换表,其中包括所有可能的尺寸(欧洲、日本等),包括可用于订购的公制尺寸。

您可以使用它来构建转换图表,并以个人喜欢的系统显示尺寸。


这正是我所需要的。其他答案也不错,但这个很好而且简单。我已经有一个sort_order字段了,但产品是通过连接到他们的EPOS系统的SOAP Web服务拉取的,手动输入排序顺序太多了。谢谢大家!! - Andy

1
创建一个用于排序的查找表。
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

1

在“A”前面加下划线“_A”会起作用并且被接受吗?你可以为了显示目的而去掉它吗?(不确定这是否有效)

或者,可以为排序设置一个与罩杯尺码字段分开的排序代码。


0
您可以按照从列派生的值进行排序。您可以使用CASE运算符来指定顺序:...

source

这将是您的选择:

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 :)


0

我更倾向于引入一个名为sequenceNo的列来存储服务器上的顺序。想象一下其他的拣选器

  • XS
  • S
  • M
  • L
  • XL
  • ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接