Dier_Sergio_Great
@Dier_Sergio_Great
Увлеченный человек

Как сортировать таблицу по соответствию нескольким строкам?

Уважаемые ГУРУ и профи SQL, дайте совет пожалуйста.
Имеется последовательность строк: "Стол", "Стул", "Пуфик".
Как видно последовательность не в алфавитном порядке,
Так вот как отсортировать таблицу чтобы 1/3 были Столы, 1/3 Стулья, 1/3 Пуфики
И чтоб только в этом порядке они выводились.
SELECT * FROM mebel  WHERE type="Стол"
UNION
SELECT * FROM mebel  WHERE type="Стул"
UNION
SELECT * FROM mebel  WHERE type="Пуфик"

А можно это сделать как то одним запросом, более проще, при помощи ORDER BY например?
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
Dier_Sergio_Great
@Dier_Sergio_Great Автор вопроса
Увлеченный человек
нашел.
SELECT * FROM mebel  
ORDER BY 
    CASE type
        WHEN 'Стол' THEN 1
        WHEN 'Стул' THEN 2
        WHEN 'Пуфик' THEN 3
        ELSE 4
    END ASC, 
    name ASC;

SELECT * FROM mebel  
ORDER BY FIELD(type, 'Стол', 'Стул', 'Пуфик');

Фишка в том что те строки которые не являются типом этих трех, они будут показаны вначале списка. так как FIELD возвращает 0 если из трех не подходит.
второй вариант
SELECT * FROM mebel  
ORDER BY FIND_IN_SET(type, 'Стол,Стул,Пуфик');

А это для интереса пишу тут.
Интеллектуальная сортировка для поля со значениями
"1-А", "10-А", "3-А", "33-А"
SELECT *
FROM mebel
ORDER BY CAST(name AS  UNSIGNED), name;

natsort($array);//аналогично для PHP
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Посмотри еще как работает
ORDER BY ISNULL(field)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы