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.