簡體   English   中英

MySQL自然排序從一定值偏移

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM