2

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

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

4

3 回答 3

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

于 2013-01-03T00:14:09.297 回答
2

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

于 2013-01-03T00:13:39.620 回答
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

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

于 2013-01-03T00:18:12.117 回答