Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL - Ordina la query e visualizza una riga casuale in alto

Usa order by . Ecco un metodo:

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;

Questo utilizza la sottoquery per identificare l'unica riga da mantenere in alto. Quindi utilizza queste informazioni per ordinare nella query esterna.

Se le tue righe hanno un identificatore univoco, potresti anche fare:

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;