У меня есть данные:
CREATE TABLE IF NOT EXISTS `sort` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`value` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `sort` (`id`, `value`) VALUES
(1, 'abc2'),
(2, 'abc20'),
(3, 'abc1'),
(4, 'abc10'),
(5, 'abc3');
Я хочу, чтобы все строки начинались с указанного идентификатора, а затем до конца этого набора результатов, чтобы были добавлены все строки до указанного идентификатора и все отсортированопо значению.
Итак, я получаю следующее:
SET @id=3;
SELECT * FROM sort
ORDER BY
id=@id DESC, value>=(SELECT value FROM sort WHERE id=@id) DESC, value ASC;
Все работает нормально, но это не естественная сортировка.С запросом выше я получаю результат abc1, abc10, abc2, abc20, abc3
.Результат, который я ищу - abc1, abc2, abc3, abc10, abc20
.И, конечно, если я изменю @ id = 4, результат будет abc10, abc20, abc1, abc2, abc3
.
. С помощью запроса, приведенного ниже, я получаю нужную естественную сортировку.
SELECT * FROM sort ORDER BY LENGTH(value), value;
Итак, вопрос: Как объединить два предложения ORDER BY в одно?