2013-01-03 73 views
2

我正在使用数据库,最终用户可以上传他们的收藏品和其他效果的照片,并且在其中一项条件下,他们可以添加条目是产品的条件(近薄荷,薄荷,优秀等)。如果我想按条件对这些条目进行排序,它将按字母顺序排序,但这不符合实际按条件排序。例如,E(优秀)将出现在M(薄荷)之前,当优秀比薄荷更糟。设置非典型排序顺序

如何为我的数据库中的这些字母赋值,以便排序时它们将以非字母顺序显示,但按实际等级显示(M> NM> E> G> P)。

+0

mint = 1,接近mint = 2,excelent = 3,good = 4? –

回答

6

向order by子句添加一个case语句。下面是一些伪SQL:

SELECT * FROM COLLECTIBLES 
ORDER BY CASE condition 
    WHEN 'EXCELLENT' THEN 1 
    WHEN 'MINT' THEN 2 
    WHEN 'NEAR MINT' THEN 3 
    ELSE 4 
END 

工作实例:http://sqlfiddle.com/#!2/328c2/1

+0

非常好,这个工作令人难以置信。我仔细研究了一下,不知道如何在'WHEN'复合体之后改变顺序,但是在'END'结尾处加上'ASC'或'DESC'给了我一个选项。高超! – gator

+1

@riista很高兴我能帮到你。 –

2

为什么不简单地使用数据库中的数字?我的意思是你可以使用1为近薄荷,2为薄荷,3为优秀等等。

1

你可能会认为,管理产品的条件另一个表:

CREATE TABLE product_condition 
(
product_condition_id INT, 
grade char(2), 
grade_sequence int 
) 

INSERT INTO product_condition VALUES (1, 'NM', 1) 
INSERT INTO product_condition VALUES (2, 'M', 2) 
INSERT INTO product_condition VALUES (3, 'E', 3) 
INSERT INTO product_condition VALUES (4, 'G', 4) 
INSERT INTO product_condition VALUES (5, 'P', 5) 

在产品表代替实际级柱与product_condition_id 。

SELECT * 
FROM product p 
JOIN product_condition pc on p.product_condition_id = p.product_condition_id 
ORDER BY grade_sequence 

我怀疑等级值是相当稳定的,但用表格可以更容易地进行更改。