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.