ORDER BY (p.id=14) DESC, (p.mPrice=p.vPrice) DESC
p.id=14 renvoie 1 si la condition est vraie, 0 sinon, le tri décroissant place la ligne souhaitée en haut.
Renvoyez un nombre à partir d'une comparaison est une fonctionnalité de MySQL, avec SQL standard, vous écririez :
ORDER BY CASE WHEN (p.id=14) THEN 0 ELSE 1 END,
CASE WHEN (p.mPrice=p.vPrice) THEN 0 ELSE 1 END
Je trouve cela plus facile à lire que le UNION , et il pourrait être plus performant.