2016-07-30 121 views
0

这将是这样的:如何通过特定订单订购?

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; 

正如我所说的一切我的订单子句值是动态的。那么对我有什么建议吗?

+1

把那些值的表,如果他们不已经。加入反对并通过它订购。 –

+1

你能描述一下订购的标准吗? “我的订单条款值是动态的”是什么意思?示例数据和预期结果会很好 – Philipp

+0

您的示例没有帮助,因为它仍然按升序排列的字母顺序排列,因此您不需要定义“CASE”语句。这是_dynamic_按列存储在查询表中的数据的顺序吗?这听起来可能像你需要分区和排名,但直到你提供更多的细节,包括预期的结果,我们无法提供帮助。 –

回答

1

您的示例并不完全清楚,因为看起来简单的ORDER BY就足以按字母顺序排列您的ID。但是,似乎您正在尝试创建可能不是按字母顺序排列的动态排序方案。在这种情况下,我的建议是使用查找表来查找您将要排序的值。这有两个目的:第一,它允许您轻松地重新排列项目,而无需更改表中的每个条目,其次,它避免(或者至少减少)错字和其他“魔术串”可能发生的问题。

这看起来是这样的:

查找表:

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 
+0

感谢您快速回复Brett。我需要一个类似下面查询的查询: 从user_group中选择* from user order by master_group order by 1,2 DESC,3); 其中用户表包含master_group表的user_group字段。 – Chinmay