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.