order by
を使用する 。これが1つの方法です:
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;
これは、サブクエリを使用して、一番上に保持する1つの行を識別します。次に、この情報を使用して、外部クエリでの順序付けを行います。
行に一意の識別子がある場合は、次のこともできます。
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;