设置非典型排序顺序

时间:2013-01-03 00:10:22

标签: php sql

我正在使用一个数据库,最终用户可以上传其收藏品和其他效果的照片,根据其中一个标准,他们可以添加条目是产品的条件(薄荷,薄荷,优质等)。如果我想按条件对这些条目进行排序,它将按字母顺序对其进行排序,但这与实际的按条件排序不对应。例如,E(优秀)将出现在M(薄荷)之前,当优秀比薄荷更差时。

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

3 个答案:

答案 0 :(得分:6)

将case语句添加到order by子句中。这是一些伪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

答案 1 :(得分:2)

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

答案 2 :(得分: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替换product表中的实际成绩列。

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

我怀疑等级值相当稳定,但使用表格可以更轻松地进行更改。