MySQL按两列排序

时间:2012-10-30 05:33:04

标签: mysql sql database

我有一张像下面这样的表


    CREATE TABLE Products(Product_id INT, ProductName VARCHAR(255), 
                          Featured enum('Yes', 'No'), Priority enum('p1', 'p2', 'p3'))


    INSERT INTO Products(ProductName, Featured, Priority) 
                  VALUES('Product A', 'Yes', 'p1'),
                        ('Product B', 'No',  'p2'),
                        ('Product C', 'Yes', 'p1'),
                        ('Product D', 'No',  'p1'),
                        ('Product E', 'Yes', 'p3'),
                        ('Product F', 'No',  'p2'),
                        ('Product G', 'Yes', 'p1'),
                        ('Product H', 'Yes', 'p2'),
                        ('Product I', 'No',  'p2'),
                        ('Product J', 'Yes', 'p3'),
                        ('Product K', 'Yes', 'p1'),
                        ('Product L', 'No',  'p3');


我需要获得精选产品,然后是产品,优先级为p1,p2和p3


Op:
   ProdName | Featured  | Priority

    Product A   Yes         p1
    Product C   Yes         p1
    Product G   Yes         p1
    Product K   Yes         p1
    Product H   Yes         p2
    Product E   Yes         p3
    Product J   Yes         p3
    Product D   No          p1
    Product B   No          p2
    Product F   No          p2
    Product I   No          p2
    Product L   No          p3

我在下面写了一个无效的查询..

                                           
  SELECT * 
    FROM Products
   ORDER BY Featured IN ('Yes') desc,
            Priority IN ('p1', 'p2', 'p3') desc

你能否发现错误

4 个答案:

答案 0 :(得分:15)

试试这个

Select * from Products ORDER BY Featured, Priority

如果你在mysql枚举上使用ORDER BY,它将不按字母顺序排序,但它将按枚举中的位置排序。

如果您想按照描述的方式按字母顺序排序枚举名称 到像这样的字符串

Select * from Products ORDER BY  concat(Featured) desc , Priority 

答案 1 :(得分:3)

为什么不简单地使用SQL作为:

 SELECT * 
 FROM Products
  ORDER BY Featured desc,
        Priority asc;

这样做Yes将出现在No之前。 P1之前P2P2 P3之前会显示 SELECT * FROM Products ORDER BY CONCAT(Featured) desc, CONCAT(Priority) asc; 。我相信,这就是你想要的。

如果订购时出现数据类型问题,

{{1}}

答案 2 :(得分:0)

检查此查询 -

 SELECT * 
 FROM Products
  ORDER BY Featured asc,Priority,ProductName asc;

Fiddle

工作代码检查小提琴

答案 3 :(得分:-1)

SELECT * 
    FROM Products
where Featured IN ('Yes') and
      Priority IN ('p1', 'p2', 'p3')
Order by Featured asc,Priority,ProductName asc;

这应该有效