ORDER BY (p.id=14) DESC, (p.mPrice=p.vPrice) DESC
p.id=14
mengembalikan 1
jika kondisinya benar, 0
jika tidak, maka pengurutan secara turun akan membawa baris yang diinginkan ke atas.
Mengembalikan angka dari perbandingan adalah fitur MySQL, dengan SQL standar Anda akan menulis:
ORDER BY CASE WHEN (p.id=14) THEN 0 ELSE 1 END,
CASE WHEN (p.mPrice=p.vPrice) THEN 0 ELSE 1 END
Menurut saya ini lebih mudah dibaca daripada UNION
, dan mungkin berkinerja lebih baik.