在A之前订购AA

时间:2011-07-14 11:57:14

标签: mysql database sql-order-by

我正在为一个销售内衣的客户做一个电子商务网站,我已经为他们写了一个文胸尺寸的选择器,但他们今天回来给我一个小问题。

对于胸围尺寸,AA小于A,所以它应该出现在图表之前,但是当我按照尺寸使用MySQL顺序时,显然它先放A,然后放AA,然后B等。

有没有一种简单的方法可以让MySQL首先订购AA,然后是A,B等?

6 个答案:

答案 0 :(得分:4)

我会在你的表中添加另一列“orderid”(INTEGER甚至TINYINT),然后按该列排序。

答案 1 :(得分:3)

假设A是唯一可能重复的字母,您可以这样做:

SELECT  *
FROM    bra
ORDER BY
        LENGTH(size) DESC, size

但更好的解决方案是创建一个转换表,它可以存储所有可能的尺寸(欧洲,日本等),包括你可以订购的度量标准。

您可以使用它来构建转换图表,并在人的首选系统中显示尺寸。

答案 2 :(得分:1)

在“A”之前放置和强调“_A”工作并且可以接受,你可以将其剥离用于显示目的吗? (不确定这是否有效)

或者从胸罩尺寸字段中选择一个分类代码进行分类。

答案 3 :(得分: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:)

答案 4 :(得分:0)

我更愿意引入一列sequenceNo来存储服务器上的订单。想象一下其他采摘者

  • XS
  • 取值
  • 中号
  • XL
  • ...

答案 5 :(得分:0)

为订购

创建一个查找表
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