Подтвердить что ты не робот

Заказ 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 пятна в том, что

4b9b3361

Ответ 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;

Это должно работать