Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - Sortieren Sie die Abfrage und zeigen Sie eine zufällige Zeile oben an

Verwenden Sie order by . Hier ist eine 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;

Dies verwendet die Unterabfrage, um die eine Zeile zu identifizieren, die oben bleiben soll. Dann verwendet es diese Informationen zum Sortieren in der äußeren Abfrage.

Wenn Ihre Zeilen eine eindeutige Kennung haben, können Sie auch Folgendes tun:

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;