как убедиться, что запись всегда находится вверху в заданном наборе результатов в mysql?

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

7
задан brainydexter 6 August 2012 в 07:23
поделиться