ORDER BY (p.id=14) DESC, (p.mPrice=p.vPrice) DESC
p.id=14 gibt 1 zurück wenn die Bedingung wahr ist, 0 andernfalls bringt eine absteigende Sortierung die gewünschte Zeile nach oben.
Das Zurückgeben einer Zahl aus einem Vergleich ist eine MySQL-Funktion, mit Standard-SQL würden Sie schreiben:
ORDER BY CASE WHEN (p.id=14) THEN 0 ELSE 1 END,
CASE WHEN (p.mPrice=p.vPrice) THEN 0 ELSE 1 END
Ich finde das einfacher zu lesen als die UNION , und die Leistung könnte besser sein.