12

我有一张如下表

    CREATE TABLE Products(Product_id INT, ProductName VARCHAR(255),
                          精选枚举('Yes', 'No'), 优先枚举('p1', 'p2', 'p3'))


    插入产品(产品名称、特色、优先级)
                  VALUES('产品 A', '是', 'p1'),
                        ('产品 B','否','p2'),
                        ('产品 C', '是', 'p1'),
                        ('产品 D','否','p1'),
                        ('产品 E','是','p3'),
                        ('产品 F','否','p2'),
                        ('产品 G','是','p1'),
                        ('产品 H','是','p2'),
                        ('产品 I','否','p2'),
                        ('产品 J','是','p3'),
                        ('产品 K', '是', 'p1'),
                        (“产品 L”、“否”、“p3”);


我需要获得特色产品,然后是优先级为 p1、p2 和 p3 的产品

操作:
   产品名称 | 精选 | 优先事项

    产品 A 是 p1
    产品 C 是 p1
    产品 G 是 p1
    产品 K 是 p1
    产品 H 是 p2
    产品 E 是 p3
    产品 J 是 p3
    产品 D 编号 p1
    产品 B 没有 p2
    产品 F 编号 p2
    产品 I 无 p2
    产品 L No p3

我在下面写了一个不工作的查询..

                                           
  选择 *
    来自产品
   ORDER BY Featured IN ('Yes') desc,
            优先级 IN ('p1', 'p2', 'p3') desc

你能发现错误吗

4

4 回答 4

16

试试这个

Select * from Products ORDER BY Featured, Priority

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

如果您想按照描述的字母顺序排序,请将枚举名称转换为这样的字符串

Select * from Products ORDER BY  concat(Featured) desc , Priority 
于 2012-10-30T05:39:19.227 回答
3

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

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

通过这样做Yes会出现之前NoP1会出现在之前P2P2之前P3。我相信,这就是你想要的。

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

 SELECT * 
 FROM Products
  ORDER BY CONCAT(Featured) desc,
        CONCAT(Priority) asc;
于 2012-10-30T05:35:26.500 回答
0

检查这个查询——

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

小提琴

工作代码检查小提琴

于 2012-10-30T05:43:39.127 回答
-1
SELECT * 
    FROM Products
where Featured IN ('Yes') and
      Priority IN ('p1', 'p2', 'p3')
Order by Featured asc,Priority,ProductName asc;

这应该工作

于 2017-02-01T16:40:59.560 回答