Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL - Ordonner la requête et afficher une ligne aléatoire en haut

Utilisez order by . Voici une méthode :

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;

Cela utilise la sous-requête pour identifier la ligne à conserver en haut. Ensuite, il utilise ces informations pour commander dans la requête externe.

Si vos lignes ont un identifiant unique, vous pouvez également :

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;