我正在使用一个数据库,最终用户可以在其中上传他们的收藏品和其他效果的照片,根据他们可以添加条目的标准之一是产品的状况(接近薄荷、薄荷、优秀等)。如果我想按条件对这些条目进行排序,它将按字母顺序排序,但这与实际的按条件排序不对应。例如,E(优秀)将出现在 M(薄荷)之前,而优秀则比薄荷差。
如何在我的数据库中为这些字母分配值,以便在排序时它们将按非字母顺序显示,而是按实际等级(M > NM > E > G > P)。
在 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
为什么不简单地在数据库中使用 ie 数字?我的意思是你可以用 1 表示接近薄荷,2 表示薄荷,3 表示优秀等等。
您可能会考虑另一个管理产品状况的表:
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
我怀疑等级值相当稳定,但使用表格可以更轻松地进行更改。