ORDER BY (p.id=14) DESC, (p.mPrice=p.vPrice) DESC
p.id=14
retorna 1
se a condição for verdadeira, 0
caso contrário, a classificação decrescente traz a linha desejada para o topo. Retornar um número de uma comparação é um recurso do MySQL, com SQL padrão você escreveria:
ORDER BY CASE WHEN (p.id=14) THEN 0 ELSE 1 END,
CASE WHEN (p.mPrice=p.vPrice) THEN 0 ELSE 1 END
Acho isso mais fácil de ler do que o
UNION
, e pode ter um desempenho melhor.