У меня есть поисковый запрос, который дает набор результатов на основе входных параметров, и результат может быть отсортирован (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 записей с идентификаторами от 1 до 20. Теперь мне нужно вернуть запись с идентификатором 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 оставалась наверху?