我有一张像下面这样的表
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
你能否发现错误
答案 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
之前P2
和P2
P3
之前会显示 SELECT *
FROM Products
ORDER BY CONCAT(Featured) desc,
CONCAT(Priority) asc;
。我相信,这就是你想要的。
如果订购时出现数据类型问题,
{{1}}
答案 2 :(得分:0)
答案 3 :(得分:-1)
SELECT *
FROM Products
where Featured IN ('Yes') and
Priority IN ('p1', 'p2', 'p3')
Order by Featured asc,Priority,ProductName asc;
这应该有效