ORDER BY (p.id=14) DESC, (p.mPrice=p.vPrice) DESC
p.id=14 retourneert 1 als de voorwaarde waar is, 0 anders, dus aflopend sorteren brengt de gewenste rij naar de top.
Het retourneren van een getal uit een vergelijking is een MySQL-functie, met standaard SQL zou je schrijven:
ORDER BY CASE WHEN (p.id=14) THEN 0 ELSE 1 END,
CASE WHEN (p.mPrice=p.vPrice) THEN 0 ELSE 1 END
Ik vind dit gemakkelijker te lezen dan de UNION , en het zou beter kunnen presteren.