ORDER BY (p.id=14) DESC, (p.mPrice=p.vPrice) DESC
p.id=14
restituisce 1
se la condizione è vera, 0
in caso contrario, quindi l'ordinamento decrescente porta in alto la riga desiderata.
Restituire un numero da un confronto è una funzionalità di MySQL, con SQL standard dovresti scrivere:
ORDER BY CASE WHEN (p.id=14) THEN 0 ELSE 1 END,
CASE WHEN (p.mPrice=p.vPrice) THEN 0 ELSE 1 END
Lo trovo più facile da leggere rispetto a UNION
e potrebbe funzionare meglio.