入力パラメーターに基づいて結果セットを生成する検索クエリがあり、結果は価格、期間などのさまざまなパラメーターに基づいて (ASC/DESC) 並べ替えることができます (ページネーションが設定されており、10 レコードの制限があります)。
id
渡された場合、対応するレコードを特定の結果セットの上部に固定する必要があります。
次のようなパッケージ テーブルがあるとします。
Package
- id
- name
- mPrice
- vPrice
- duration
// Searching pkg based on Price (in DESC order) where name = Thailand
sqlQuery =
"SELECT p.id, p.name, p.mPrice, p.vPrice FROM package p
WHERE p.name = LOWER('Thailand')
ORDER BY (p.mPrice + p.vPrice) DESC
LIMIT 10"
完全な結果セットが ID 1 から 20 の 20 レコードであると仮定しましょう。ID 14 のレコードを常に一番上に返す必要があります。次のクエリを思いつきましたが、これは機能しません。
sqlQuery =
"SELECT p.id, p.name, p.mPrice, p.vPrice FROM package p
WHERE p.name = LOWER('Thailand') or p.id = 14
ORDER BY CASE
WHEN p.id=14 then 0
else (p.mPrice + p.vPrice)
end DESC
LIMIT 10"
これが機能しない理由についての私の推測: order by 句の後、結果セットは降順でソートされ、10 レコードで切り捨てられます。id=14 のレコードは、この切り捨てられたセットの一部ではない可能性があります。これは正しいです ?
id=14 のレコードを一番上に固定するにはどうすればよいですか?