我有一个搜索查询,它根据输入参数产生一个结果集,并且可以根据不同的参数对结果进行排序(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"
假设完整的结果集是 20 条 id 为 1 到 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 的记录保持在顶部?