ORDER BY (p.id=14) DESC, (p.mPrice=p.vPrice) DESC
p.id=14
returnerar 1
om villkoret är sant, 0
annars, så sortering fallande för den önskade raden till toppen.
Att returnera ett nummer från en jämförelse är en MySQL-funktion, med standard SQL skulle du skriva:
ORDER BY CASE WHEN (p.id=14) THEN 0 ELSE 1 END,
CASE WHEN (p.mPrice=p.vPrice) THEN 0 ELSE 1 END
Jag tycker att detta är lättare att läsa än UNION
, och det kanske fungerar bättre.