MySQL按两列排序

use*_*187 12 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

你能不能发现错误

gan*_*esh 16

试试这个

Select * from Products ORDER BY Featured, Priority
Run Code Online (Sandbox Code Playgroud)

如果在mysql枚举上使用ORDER BY,它将不按字母顺序排序,但它将按枚举中的位置对其进行排序.

如果您想按照描述的方式按字母顺序排序,请将枚举名称强制转换为此类字符串

Select * from Products ORDER BY  concat(Featured) desc , Priority 
Run Code Online (Sandbox Code Playgroud)