ORDER BY (p.id=14) DESC, (p.mPrice=p.vPrice) DESC
p.id=14
devuelve 1
si la condición es verdadera, 0
de lo contrario, la ordenación descendente lleva la fila deseada a la parte superior.
Devolver un número de una comparación es una característica de MySQL, con SQL estándar escribirías:
ORDER BY CASE WHEN (p.id=14) THEN 0 ELSE 1 END,
CASE WHEN (p.mPrice=p.vPrice) THEN 0 ELSE 1 END
Encuentro esto más fácil de leer que UNION
, y podría funcionar mejor.