ORDER BY (p.id=14) DESC, (p.mPrice=p.vPrice) DESC
p.id=14
zwraca 1
jeśli warunek jest prawdziwy, 0
w przeciwnym razie sortowanie malejąco przenosi żądany wiersz na górę.
Zwracanie liczby z porównania to funkcja MySQL, w przypadku standardowego SQL można napisać:
ORDER BY CASE WHEN (p.id=14) THEN 0 ELSE 1 END,
CASE WHEN (p.mPrice=p.vPrice) THEN 0 ELSE 1 END
Uważam, że jest to łatwiejsze do odczytania niż UNION
i może działać lepiej.