Gebruik order by
. Hier is een methode:
select t.*
from (select t.*, (@rn := @rn + 1) as seqnum
from tickets t cross join
(select @rn := 0) params
order by vip desc, rand()
) t
order by (seqnum = 1) desc, price asc;
Dit gebruikt de subquery om de ene rij te identificeren die bovenaan moet blijven. Vervolgens gebruikt het deze informatie voor het bestellen in de buitenste zoekopdracht.
Als uw rijen een unieke identificatie hebben, kunt u ook het volgende doen:
select t.*
from tickets t cross join
(select id from tickets where vip = 1 order by rand() limit 1) as t1
order by (t.id = t1.id) desc, price asc;