【问题标题】:Ordering AA before A在 A 之前订购 AA
【发布时间】:2011-07-14 11:57:14
【问题描述】:

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

对于胸罩尺寸,AA小于A,所以它应该出现在图表之前,但是当我使用MySQL对尺寸排序时,显然它把A放在第一位,然后是AA,然后是B等等。

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

【问题讨论】:

标签: mysql database sql-order-by


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    但更好的解决方案是创建一个转换表,该表将存储所有可能的尺寸(欧洲、日本等),包括你可以订购的公制。

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

    【讨论】:

    • 这非常适合我的需要。其他一些答案也很好,但这很好也很简单。我已经有一个 sort_order 字段,但是产品是从连接到他们的 EPOS 系统的 SOAP Web 服务中提取的,手动输入排序顺序太多了。谢谢大家!!
    【解决方案3】:

    在“A”之前加上和下划线这样“_A”可以工作并且可以接受,您可以将其剥离以进行显示吗? (不确定这是否可行)

    或者在胸罩尺寸字段中单独设置一个分类代码以进行分类。

    【讨论】:

      【解决方案4】:

      为排序创建一个查找表

      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
      

      【讨论】:

        【解决方案5】:

        您可以按从列中派生的值进行排序。您可以使用 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 :)

        【讨论】:

          【解决方案6】:

          我更愿意引入一个列sequenceNo 来将订单存储在服务器上。想象一下其他的选择器

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-03-05
            • 1970-01-01
            • 2013-02-22
            • 1970-01-01
            • 2013-04-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多