2013-01-03 100 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 

我懷疑等級值是相當穩定的,但用表格可以更容易地進行更改。