2

私は、エンド ユーザーが収集品やその他の効果の写真をアップロードできるデータベースを使用しています。エントリを追加できる基準の 1 つは、製品の状態 (ミントに近い、ミント、エクセレントなど) です。これらのエントリを条件で並べ替えたい場合、アルファベット順に並べ替えられますが、これは実際の条件による並べ替えには対応していません。たとえば、エクセレントがミントより悪い場合、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

データベースで単純に数値を使用しないのはなぜですか? つまり、ミントに近い場合は 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 に答える