1

架空の例: HOUSES というテーブルがあり、各行を最後に更新された順に表示したいとします。
-最新のものを最初に、最も古いものを最後に。
-また、売れ残りを最初に、すべての販売済み在庫を最後に注文したいと考えています。

-管理者は、未販売から販売済みへの変更を行うこともでき、その変更により、他のアイテムが販売された状態でアイテムを一番下にドロップする必要があります。また、必要に応じて、特定の家の表示順序を手動で変更することもできます。

どうすればいいですか?これらは、私が使用しなければならない列です。

  -ID(追加された日付で並べ替えるために使用できます)、
  -PRICE (値: 売れ残った場合の価格、または売れた場合は「SOLD」)
  -DISP_ORDER (実際の表示順序を持つ整数フィールド)
4

1 に答える 1

0

次のことを試してください。

SELECT * FROM (
    SELECT
        ID, PRICE, DISP_ORDER,
        CASE WHEN PRICE = 'SOLD' THEN 1 ELSE 0 END AS soldOrder,
        CASE WHEN DISP_ORDER > 0 THEN DISP_ORDER ELSE -ID END AS customOrder
    FROM HOUSES
) AS q
ORDER BY
   soldOrder, customOrder

内部クエリは、2 つのカスタム ソート列を作成します。soldOrderすべての販売済みアイテムの値を 1 にし、すべての非販売アイテムの値を 0にします。customOrder列は、DISP_ORDER値が設定されている場合はその値を使用し、それ以外の場合は使用します-ID(「降順で作成された日付」の実装を取得するため)。
外側のクエリはすべてのフィールドを選択し、sortOrder最初に (すべての売れ残ったアイテムを一番上に配置し、一番下に販売済みのアイテムを配置) 並べ替え、次に 2 つの半分のそれぞれをそのcustomOrder値で並べ替えます (DISP_ORDER値が最初にあり、その後に最新のすべてのアイテムが続きます)。 -最初の順序を変更)。

于 2012-08-07T18:39:17.613 に答える