[英]MySql natural sorting with offset from a certain value
我有數據:
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');
我想讓所有行都從指定的ID開始,然后到該結果集的末尾,以將所有行添加到指定的ID並按值排序。
所以我出來了:
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子句組合成一個子句?
這應該工作:
SELECT *
FROM sort
ORDER BY
id=@id DESC,
LENGTH(value),
value>=(SELECT value FROM sort WHERE id=@id) DESC,
value ASC;`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.