Заказ MySQL на два столбца
У меня есть таблица вроде ниже
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
Может ли ошибка plz пятна в том, что
Ответы
Ответ 1
Попробуйте это
Select * from Products ORDER BY Featured, Priority
Если вы используете ORDER BY для перечисления mysql, он не будет упорядочивать его по алфавиту, но он будет заказывать его по его позиции в перечислении.
Если вы хотите заказать по алфавиту, как вы описали, набросать имя перечисления
к строке, подобной этой
Select * from Products ORDER BY concat(Featured) desc , Priority
Ответ 2
Почему бы вам просто не использовать 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;
Ответ 3
Проверить этот запрос -
SELECT *
FROM Products
ORDER BY Featured asc,Priority,ProductName asc;
Fiddle
Проверка скрипта рабочего кода
Ответ 4
SELECT *
FROM Products
where Featured IN ('Yes') and
Priority IN ('p1', 'p2', 'p3')
Order by Featured asc,Priority,ProductName asc;
Это должно работать