这将是:
SELECT * FROM users ORDER BY id ORDER("abc","ghk","pqr"...);
在我的订单条款中,可能有1000条记录,而且都是动态的。
快速谷歌搜索给了我以下结果:
SELECT * FROM users ORDER BY case id
when "abc" then 1
when "ghk" then 2
when "pqr" then 3 end;
正如我所说的所有订单子句值都是动态的。那么对我有什么建议吗?
答案 0 :(得分:1)
您的示例并不完全清楚,因为看起来简单的ORDER BY
就足以按字母顺序排列您的ID。但是,您似乎正在尝试创建可能不按字母顺序排列的动态排序方案。在这种情况下,我的建议是使用查找表来查找您将要排序的值。这有两个目的:首先,它允许您轻松地重新排序项目而不更改users
表中的每个条目,其次,它避免(或至少减少)拼写错误和其他可能发生的问题#34;魔术弦。"
这看起来像是:
查找表:
CREATE TABLE LookupValues (
Id CHAR(3) PRIMARY KEY,
Order INT
);
<强>查询:强>
SELECT
u.*
FROM
users u
INNER JOIN
LookupTable l
ON
u.Id = l.Id
ORDER BY
l.Order